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

相关推荐
画面无声10 分钟前
STM32的SPI通信原理与练习记录
c语言·stm32·单片机·嵌入式硬件·学习
你有哈莫吗1 小时前
CMake构建学习笔记-iconv库的构建
笔记·学习
ctlover2 小时前
Python学习第4日
学习
geats人山人海3 小时前
数据结构第六章c语言 树的存储下二叉树的概念和存储
c语言·数据结构·算法
小弥儿3 小时前
GitHub今日热榜 | 2026-08-01:硬件安全工具与AI教育并行
人工智能·学习·开源·github
秋雨梧桐叶落莳3 小时前
计算器仿写总结
学习·macos·ios·objective-c·cocoa
漂流瓶jz3 小时前
UVA-12627 奇怪的气球膨胀 题解答案代码 算法竞赛入门经典第二版
算法·图论·递归·aoapc·算法竞赛入门经典·uva·12627
jarvisuni3 小时前
DeepSeekFlash前端依旧拉垮,而且变慢了很多!
前端·javascript·算法
kobesdu4 小时前
流形上的优化:SO(3)与SE(3)的广义加减法在FAST-LIO中如何简化状态估计
人工智能·算法·fastlio
统计学小王子4 小时前
《数学少年-从正负号到几何原本》(第一章:“刻度之上,零为分界“)--1.2 电梯与账单里的相反数字
学习·初中数学·初中数学科普·数学科普