1. 162
find-peak-element
2.算法
3.算法
* 二分
- 找到任意一个峰值就可以
- 二分查找,折半后,
- 和紧跟的那个元素比较
- 如果大于紧跟元素,说明峰值在前面,如果小于紧跟,说明峰值在后面
class Solution {
public:
int findPeakElement(vector<int>& nums) {
if(nums.empty()) return 0;
int left=0,right=nums.size()-1;
while(left<right){
int mid=left+(right-left)/2;
if(nums[mid]<nums[mid+1]) left=mid+1;
else right=mid;
}
return right;
}
};
* 模拟
- 从第二个数字开始,
- 如果某个数字小前面的数字,说明是局部峰值
class Solution {
public:
int findPeakElement(vector<int>& nums) {
for(int i=1;i<nums.size()-1;++i)
if(nums[i]<nums[i-1])
return i-1;
}
return nums.size()-1;
};