天天看點

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

繼續閱讀