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++代码
|
|