A peak element is an element that is greater than its neighbors.

Given an input array where ​​num[i] ≠ num[i+1]​​, find a peak element and return its index.

The array may contain multiple peaks, in that case return the index to any one of the peaks is fine.

You may imagine that ​​num[-1] = num[n] = -∞​​.

For example, in array ​​[1, 2, 3, 1]​​, 3 is a peak element and your function should return the index number 2.

​click to show spoilers.​

Credits:

Special thanks to ​​@ts​​ for adding this problem and creating all test cases.

 


Hide Tags

 ​​Array​​ ​​Binary Search​

 


 


分析:




 


此题是找局部最大

 



class Solution {
public:
int findPeakElement(vector<int>& nums)
{
if(nums.size() == 0)
return -1;
if(nums.size() == 1)
return 0;
if(nums[0] > nums[1])
return 0;

int size = nums.size();
if(nums[size - 1] > nums[size - 2])
return size - 1;

int low = 1;
int high = size - 2;
int mid;

while(low < high)
{
mid = (low + high)/2;
if(nums[mid] < nums[mid+1])
{
low = mid+1;
}
else if(nums[mid] < nums[mid-1])
{
high = mid-1;
}
else
return mid;
}
return low;


}
};