刚开始没认真看题目,遍历一下就过了,后来才发现需要logn的复杂度,实在惭愧ii,想了好几个小时...
重点是要利用好第一个值和最后一个值当作负无穷的条件,利用二分法可以解得
对于mid来说,如果mid+1>mid,那就说明在mid+1到最终值之间,肯定有个peak值,
如果mid+1<mid,那就说明最初值到mid之间,肯定有个peak值,代码如下
class Solution {
public:
int findPeakElement(const vector<int> &num)
{
int left(0);
int right = num.size()-1;
if(right<1) return 0;
while(left < right)
{
int mid = (left+right)/2;
if(num[mid] < num[mid+1])
left = mid+1;
else
right = mid;
}
return left;
}
};