题意:一个数组,相邻的元素不相等,让你找出这个数组的驼峰,驼峰就是这个元素比相邻的元素都大。
题解:二分查找,如果你发现某个元素比左边相邻的元素小,那么左边一定存在驼峰,同理,右边也是。通过这个规律就可以二分了。
class Solution {
public:
int findPeakElement(vector<int>& nums) {
int l = 0;
int r = nums.size()-1;
while(l<=r)
{
int mid = (l+r)/2;
if((mid+1==nums.size()||nums[mid]>nums[mid+1])&&
(mid-1==-1||nums[mid]>nums[mid-1]))
return mid;
if(mid+1<nums.size()&&nums[mid]<nums[mid+1])
{
l = mid+1;
continue;
}
if(mid-1>=0&&nums[mid]<nums[mid-1])
{
r = mid-1;
continue;
}
}
return l;
}
};