leetcode 162. 寻找峰值
题意
给定数组 , 在 \(O(logn)\) 的复杂度内找到下标 \(i\) , 使得 $a_i > a_{i-1} $ 且 \(a_i > a_{i+1}\)
思路
本题是一个二分 , 判断\(a_{mid}\) 值 和 \(a_{mid+1}\) 值大小 , 如果 \(a_{mid+1}\) 大 , 那么 \(mid+1\) 到 \(必然存在极大值\)
左边也是同理
但是当我将二分模板 \(l + 1 < r , l = mid , r = mid , res = l/r\) 交上去错了QAQ...
为此不得不学习新的模板 , \(l < r , l = mid+1 , r = mid, res = r\) , 对照来看 , 其实是将\(l + 1\) 换成了 \(l\) , 因此度 \(l\) 赋值时 , 对原来的 \(l = mid\) ,
所以这个新的就是 \(mid + 1\) 了
代码
int findPeakElement(vector<int>& nums) {
int l= 0,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 r;
}

浙公网安备 33010602011771号