LeetCode - 852. 山脉数组的峰顶索引
题目
852. 山脉数组的峰顶索引 - 力扣(LeetCode)
思路
使用二分查找来定位峰顶
对于中间元素,比较它与其右侧元素的大小:
- 如果 arr[mid] < arr[mid+1],说明我们在上坡阶段,峰顶在右侧
- 如果 arr[mid] > arr[mid+1],说明我们在下坡阶段,峰顶在左侧或当前位置
不断缩小搜索范围,直到 left == right,此时指向的就是峰顶位置
时间复杂度和空间复杂度
时间复杂度:O(log n),符合题目要求
空间复杂度:O(1)
正确的写法
class Solution {
public:int peakIndexInMountainArray(vector<int>& arr) {int left = 0;int right = arr.size()-1;while(left < right){int mid = left + (right-left)/2;if(arr[mid] < arr[mid+1]){left = mid+1;}else if(arr[mid] > arr[mid+1]){right = mid;}}return left;}
};