162. 寻找峰值
分析
- 定义区间:
- 使用两个指针
l
和r
,分别指向数组的起点和终点,表示当前搜索的范围
- 使用两个指针
- 二分查找:
- 计算中间位置
mid = (l + r) / 2
- 比较
nums[mid]
和nums[mid + 1]
:- 如果
nums[mid] > nums[mid + 1]
:说明峰值可能在左侧(包括当前mid
),将右边界r
移到mid
- 如果
nums[mid] < nums[mid + 1]
:说明峰值可能在右侧,更新左边界l
为mid + 1
- 如果
- 计算中间位置
- 结束条件:
- 当
l == r
时,区间缩小为一个位置,此时该位置即为峰值索引
- 当
时间复杂度
时间复杂度 O(logn)
空间复杂度
空间复杂度为 O(1)
C++代码
|
|