https://leetcode-cn.com/problems/find-peak-element/
官方解答
遍历
class Solution {
public:
int findPeakElement(vector<int>& nums) {
for (int i = 0; i < nums.size() - 1; ++i)
{
if (nums[i] > nums[i+1])
return i;
}
return nums.size()-1;
}
};
递归二分
class Solution {
public:
int findPeakElement(vector<int>& nums) {
return search(nums,0,nums.size()-1);
}
int search(vector<int>& nums, int l, int r)
{
if (l == r)
return l;
int mid = (l+r)/2;
if (nums[mid] > nums[mid+1])
return search(nums, l, mid);
else
return search(nums, mid + 1, r);
}
};
迭代二分
class Solution {
public:
int findPeakElement(vector<int>& nums) {
int l = 0;
int r = nums.size()-1;
while(l<r)
{
int mid = (l+r)/2;
if (nums[mid] > nums[mid+1])
r = mid;
else
l = mid + 1;
}
return l;
}
};