天天看点

162.寻找峰值

162.寻找峰值

开始觉得无从下手,怎么能用二分解决呢??

写了好多if判断过了。

后来想明白了

这个题就是用二分逼近其中一个最高点。

即用二分找到一个山峰即可。

162.寻找峰值

在山上无非两种情况

  • 上坡:那我们一直向上走。即

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

继续阅读