【 每天学习一点算法 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)

相关推荐
阳光九叶草LXGZXJ2 小时前
达梦数据库-报错-15-列【XXX】长度超出定义
linux·运维·数据库·sql·学习
怕浪猫2 小时前
RAG 面试 6 连问,从原理到优化全部覆盖
python·算法·面试
无线通信科研笔记3 小时前
IEEE TVT 2026 论文精读与完整复现|相位误差如何重塑近场 RIS 的幅相响应
论文阅读·人工智能·python·算法·论文笔记
mmmmath_34 小时前
二叉树の递归遍历
算法
All for pursuit.4 小时前
【位运算-1】338.比特位计数
数据结构·c++·算法·leetcode
小师兄吃牛肉5 小时前
C语言中的nullptr有必要吗
c语言·c++·算法
mlidongfeng5 小时前
【学习】mKernel 分析
学习
一只小小的芙厨6 小时前
【线性DP】
学习·算法·动态规划
奋发向前wcx6 小时前
CSP-J复赛模拟赛5 王晨旭补题 2026.10.5
算法
li星野7 小时前
DO — Auxiliary Verb (One-Page Notes)
学习