【 每天学习一点算法 2026/03/24】寻找峰值

每天学习一点算法 2026/03/24

题目:寻找峰值

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

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

你可以假设 nums-1 = numsn = -∞ 。

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

  1. 因为题目保证了,对于所有有效的 i 都有 nums[i] != nums[i + 1],所以我们可以直接找到最大值,肯定是峰值之一

    typescript 复制代码
    function findPeakElement(nums: number[]): number {
      let maxIndex = 0
      for (let i = 0; i < nums.length; i++) {
        if (nums[i] > nums[maxIndex]) {
          maxIndex = i
        }
      }
      return maxIndex
    };
  2. 还有一种方法可以解决相邻元素相等的情况

    typescript 复制代码
    function findPeakElement(nums: number[]): number {
      if (nums.length === 1) return 0
      for (let i = 0; i < nums.length; i++) {
        if (i === 0 || nums[i] > nums[i - 1]) {
          if (i === nums.length - 1 || nums[i] > nums[i + 1]) {
            return i
          } else if (nums[i] < nums[i + 1]) {
            continue
          } else {
            // 跳过相等的相邻元素
            i++
          }
        }
      }
      return -1
    };

题目来源:力扣(LeetCode)

相关推荐
JieE2123 小时前
LeetCode 101. 对称二叉树|JS 递归 + 迭代双解法,彻底搞懂镜像判断
javascript·算法
JieE2121 天前
LeetCode 56. 合并区间|超清晰 JS 图解思路,面试高频区间题
javascript·算法·面试
Jack201 天前
HarmonyOS开发中错误处理策略:网络异常统一处理
算法
小小杨树1 天前
读懂色彩:拍照调色不再难
算法·计算机视觉·配色
JieE2122 天前
LeetCode 226. 翻转二叉树|JS 递归超详细拆解,二叉树入门经典题
javascript·算法
JieE2122 天前
LeetCode 104. 二叉树的最大深度|递归思路超详细拆解
javascript·算法
vivo互联网技术2 天前
CVPR 2026 | 全新强化学习框架 BeautyGRPO:重塑真实人像
算法·大模型·cvpr·影像
Darling噜啦啦2 天前
列表转树算法深度解析:从 Map 到 Reduce 的两种实现,面试高频考点
数据结构·算法·面试
用户497863050732 天前
(一)小红的数组操作
算法·编程语言