Description:
题目大意:寻找峰值,其左右两边均小于其值
解题思路:
算法标签:二分法
- 如果是上坡,则肯定有峰值,因为 n u m s [ 0 ] = n u m s [ n ] = − ∞ nums[0] = nums[n] = -\infty nums[0]=nums[n]=−∞
- 如果是下坡,则不一定有山峰,因为可能是一直下坡
代码:
class Solution {
public:
int findPeakElement(vector<int>& nums) {
int left = 0,right = nums.size() - 1;
while(left < right) {
// 防止直接相加发生溢出
int mid = ((right - left) >> 1) + left;
if(nums[mid] < nums[mid + 1])
left = mid + 1;
else
right = mid;
}
return left;
}
};