【leetcode】162. 寻找峰值

38 阅读1分钟

leetcode-162.png

这一题需要找到峰值,看题目里面的要求,这里的左右边界都是-Infinity,所以对于在左边界上的递减,右边界上的递增,此时的边界都是符合条件的。

这里用二分查找来寻找
看斜率,如果此时mid还有mid+1位置上的数字是递减的,那么我们到左边进行查找,反之到右边进行查找。

var findPeakElement = function (nums) {
    let left = 0,
        right = nums.length - 1;
    // 这里的循环条件不能用 <= ,防止越界
    while (left < right) {
        let mid = Math.floor((left + right) / 2);
        if (nums[mid] > nums[mid + 1]) {
            right = mid;
        } else {
            left = mid + 1;
        }
    }
    return left;
};