LeetCode 162
https://leetcode.cn/problems/find-peak-element/description/
难度:中等
如果 nums[mid] > nums[mid + 1],说明 mid 要么就是峰值,要么在峰值的右侧,染成蓝色,否则 mid 在峰值的左侧,染成红色。
二分开区间为 (-1, n - 1)。因为 n - 1 一定满足条件,是蓝色。
时间复杂度:O(logn),其中 n 为 nums 的长度。
空间复杂度:O(1),仅用到若干额外变量。
class Solution {
public:
int findPeakElement(vector<int>& nums) {
int left = -1, right = nums.size() - 1; // 开区间 (-1, n-1)
while (left + 1 < right) { // 开区间不为空
int mid = left + (right - left) / 2;
if (nums[mid] > nums[mid + 1]) {
right = mid;
} else {
left = mid;
}
}
return right;
}
};