33. Search in Rotated Sorted Array
分析
- 找旋转点:
- 通过二分查找,判断
nums[mid]
和nums[0]
的关系:- 如果
nums[mid] >= nums[0]
,说明mid
在前半部分,继续搜索右侧 - 否则,说明
mid
在后半部分,继续搜索左侧
- 如果
- 最终
r
指向旋转点前的最后一个位置
- 通过二分查找,判断
- 确定搜索范围:
- 如果
target >= nums[0]
,说明目标值在前半部分,设置l = 0
- 否则,目标值在后半部分,设置
l = r + 1,r = nums.size() - 1
- 如果
- 二分查找目标值:
- 普通的二分查找,最终检查
nums[r]
是否等于目标值
- 普通的二分查找,最终检查
时间复杂度
- 找旋转点和目标值各需要一次二分查找,每次的时间复杂度为
O(log n)
总体时间复杂度为 O(log n)
空间复杂度
使用常量级别额外空间,空间复杂度为 O(1)
C++代码
|
|