LeetCode 162. Find Peak Element
原题链接
中等
作者:
chaoxi
,
2020-02-10 19:25:06
,
所有人可见
,
阅读 646
C++ 代码
class Solution {
public:
int findPeakElement(vector<int>& nums) {
if(nums.empty()) return -1;
int n = nums.size();
if(n == 1) return 0;
// n >= 2
if(check_right(0, nums)) return 0;
if(check_left(n - 1, nums)) return n - 1;
// 此时 n 至少为 3
int left = 1, right = n - 2; // n = 3 时, left = 1, right = 1 必进循环
while(left <= right)
{
int mid = left + (right - left) / 2;
if(check_left(mid, nums))
{
if(check_right(mid, nums))
return mid;
else
left = mid + 1;
}
else
right = mid - 1;
}
return -1;
}
private:
bool check_left(int index, vector<int> &nums)
{
// 查 index 左边的
// index : [1 .. n - 1]
if(nums[index - 1] < nums[index])
return true;
else
return false;
}
bool check_right(int index, vector<int> &nums)
{
// 查 index 右边的
// index : [0 .. n - 2]
if(nums[index] > nums[index + 1])
return true;
else
return false;
}
};