【剑指offer】寻找峰值

  |   0 评论   |   0 浏览

题目

峰值元素是指其值严格大于左右相邻值的元素。

给你一个整数数组 nums,找到峰值元素并返回其索引。数组可能包含多个峰值,在这种情况下,返回 任何一个峰值 所在位置即可。

你可以假设 nums[-1] = nums[n] = -∞ 。

你必须实现时间复杂度为 O(log n) 的算法来解决此问题。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/find-peak-element
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

我的答案

/**
 * @param {number[]} nums
 * @return {number}
 */
var findPeakElement = function (nums) {
    if (nums.length < 3) {
        if (nums.length === 1) {
            return 0;
        }
        if (nums.length === 2) {
            return nums[0] > nums[1] ? 0 : 1;
        }
    }
    var i = parseInt((nums.length - 1) / 2);
    while (i >= 0 && i < nums.length && (nums[i - 1] >= nums[i] || nums[i + 1] >= nums[i])) {
        if (nums[i - 1] <= nums[i] && nums[i] <= nums[i + 1]) {
            i++;
        } else if (nums[i - 1] >= nums[i] && nums[i] >= nums[i + 1]) {
            i--;
        }else{
            i--;
        }

    }
    return i;
};

题目所设的条件都表示使用二分,根据题目的条件所示,数组左右两边均小于所有数,所以递增向右走,递减向左走是可以行得通的。


标题:【剑指offer】寻找峰值
作者:limanting
地址:https://blog.manxiaozhi.com/articles/2021/10/07/1633591845544.html