剑指 Offer II 069. 山峰数组的顶部
思路:二分
考虑山峰数组,从中间切一刀,如果一边是单调递增或递减,那么峰顶在另外一边,然后继续对另外一边二分即可。
class Solution {
public:
int peakIndexInMountainArray(vector<int>& arr) {
int left=0,right=arr.size()-1;
while(left<right){
int mid=left+right>>1;
if(arr[mid]>arr[mid-1]&&arr[mid]>arr[mid+1])
return mid;
else if(arr[mid]<=arr[mid-1])//右边递减
right=mid;
else //左边递增
left=mid+1;
}
return left;
}
};
时间复杂度:O(log n)
空间复杂度 O(1)