Leetcode162. 寻找峰值
思路:二分
第一步:证明峰值一定存在的
如果第一个点比第二个点高的话,第一个点可以是峰值;如果第二个点比第一个点高,直到出现第一个下降趋势的点,那个点就是峰值,如果一个单增,右端点就是峰值,所以峰值一定存在。
第二步:二分寻找答案
比较某一个点,右边的点,如果nums[i] < nums[i + 1]
,在[i~r]
区间内一定存在峰值,反之也成立
class Solution {
public:
int findPeakElement(vector<int>& nums) {
int l = 0, r = nums.size() - 1;
while (l < r) {
int mid = l + r >> 1;
if (nums[mid] > nums[mid + 1]) r = mid;
else l = mid + 1;
}
return r;
}
};