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;
    }

posted @ 2025-04-10 00:44  Guaninf  阅读(4)  评论(0)    收藏  举报