class Solution {
public:
int findPeakElement(vector& nums) {
//局部肯定有序,当不存在峰值时,数组必定升序或降序
int n = nums.size();
if(n == 1 || nums[0] > nums[1])
return 0;
if(nums[n - 1] > nums[n - 2])
return n - 1;
int left = 0, right = n - 1, mid;
while(left <= right){
mid = (left + right) / 2;
if(nums[mid] > nums[mid - 1] && nums[mid] > nums[mid + 1]){
break;
}
else if(nums[mid] > nums[mid - 1]){
left = mid + 1; //向右不会触碰到最右边,所以可以 + 1
}
else{
right = mid; //如果这里 - 1,则可能会碰到最左边,导致上面的if中超出边界
}
}
return mid;
}
};
Accepted
63/63 cases passed (0 ms)
Your runtime beats 100 % of cpp submissions
Your memory usage beats 63.44 % of cpp submissions (8.6 MB)



