- 分析
二分查找,题目给的条件是相邻节点不相同,所以当nums[mid] < nums[mid + 1]时,右边肯定有一个峰值,否则左边肯定有一个峰值。 - 代码
class Solution {
public:
int findPeakElement(vector<int>& nums) {
int left = 0;
int right = nums.size() - 1;
int size = nums.size();
while(left <= right){
int mid = left + (right - left) / 2;
if(mid + 1 < size && nums[mid] < nums[mid + 1]){
left = mid + 1;
}else{
right = mid - 1;
}
}
return right + 1;
}
};