链接:852. 山脉数组的峰顶索引 - 力扣(LeetCode)
题解:
事实证明,二分查找不局限于有序数组,非有序的数组也同样适用
二分查找主要思想在于二段性,即将数组分为两段。本体就可以将数组分为arr[i]>=arr[i-1]部分和arr[i]<arr[i-1]的两部分,我们实际上查找的是arr[i]>=arr[i-1]部分的最右端点,因此本题使用二分查找的右端点版本。
class Solution {
public:
int peakIndexInMountainArray(vector<int>& arr) {
int left=0;
int right=arr.size()-1;
int mid=left+(right-left+1)/2;
while(left<right)
{
if(arr[mid]<arr[mid-1])
{
right=mid-1;
mid=left+(right-left+1)/2;
}
else
{
left=mid;
mid=left+(right-left+1)/2;
}
}
return left;
}
};