162.寻找峰值

在这里插入图片描述
开始觉得无从下手,怎么能用二分解决呢??
写了好多if判断过了。
后来想明白了
这个题就是用二分逼近其中一个最高点。
即用二分找到一个山峰即可。
在这里插入图片描述
在山上无非两种情况

  • 上坡:那我们一直向上走。即left=mid+1(不必担心悬崖,悬崖正好也是解)
  • 下坡:那我们反向走,去走上坡,即right=mid
  • 这样会逼近一个山峰。
class Solution {
    
    
    public int findPeakElement(int[] nums) {
    
    
        if(nums.length==1) return 0;
        int l = 0, r = nums.length - 1;
        while (l <r) {
    
    
            int mid = (l + r) / 2;
            if (nums[mid] > nums[mid + 1])//下坡
                r = mid;
            else//上坡
                l = mid + 1;
        }
        return l;
    }
}

猜你喜欢

转载自blog.csdn.net/qq_43179428/article/details/107415298