题目描述
思路分析
二分
性质:如果
n
u
m
s
[
m
i
d
+
1
]
<
n
u
m
s
[
m
i
d
]
nums[mid+1]<nums[mid]
nums[mid+1]<nums[mid]则更新右端点,否则更新左端点。因为两侧都是负无穷,因此出现了“上升”趋势,则在那一侧必然存在极大值。
代码实现
class Solution {
public:
int findPeakElement(vector<int>& nums) {
int n=nums.size();
if(n==1) return 0;
int l=0,r=n-1;
nums.push_back(INT_MIN);
while(l<r){
int mid=l+r>>1;
if(nums[mid+1]<nums[mid]) r=mid;
else l=mid+1;
}
return l;
}
};