思路:
二分。二分一般用在已经sort好的序列上,该题用二分是由于题目本身特殊:
注意题目要求,找到任意一个peak element的位置即可,这个peak element不一定要是最大的peak element。
时间复杂度O(logN),空间复杂度O(1)。
class Solution {
public:
int findPeakElement(vector<int>& nums) {
int n = nums.size();
if(n == 0) return 0;
if(n == 1) return 0;
int left = 0, right = n - 1;
while(left < right) {
int mid = left + (right - left) / 2;
if(nums[mid] > nums[mid + 1]) {
right = mid;
}else {
left = mid + 1;
}
}
return left;
}
};