YSMull
<-- algorithm



原题链接

分析

使用二分模板:
原命题可转化为:

  1. 找到第一个比右边大的元素。
  2. 或者找到最后一个比左边大的元素。
    由于二分模板比较擅长找「第一个」,所以用第一种来实现。

实现

这里直接使用二分模板

class Solution {
    public int findPeakElement(int[] nums) {
        int l = 0, r = nums.length - 1;
        while (l < r) {
            int mid = l + (r - l) / 2;
            if (check(mid, nums)) {
                r = mid;
            } else {
                l = mid + 1;
            }
        }
        return l;
    }
    // 找到第一个比右边大的
    public boolean check(int mid, int[] nums) {
        return nums[mid] > nums[mid + 1];
    }
}