1.题目


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.


2.解决方案


class Solution {
public:
int findPeakElement(const vector<int> &num) {
int left = 0;
int right = num.size() - 1;

while(left < right){
int mid = (left + right) / 2;
if(num[mid] < num[mid + 1]){
left = mid + 1;
}else{
right = mid;
}
}
if(num[left] < num[right]){
return right;
}else{
return left;
}
}
};


思路:因为只需要找到一个最大值,所以这里也可以用二分查找的思想。如果这个值比右边的值小,那么峰值肯定在右侧,所以修改左边的index,如果这个值比右边的大,那么峰值肯定在左侧。注意这里的结束条件,会有两个数,返回大的那个index即可。