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

相关推荐
luj_17685 小时前
残熵算法实时化三大瓶颈突破
c语言·开发语言·网络·经验分享·算法
mCell6 小时前
你以为短链接只是 Hash + 301/302?
后端·算法·架构
KaMeidebaby7 小时前
卡梅德生物技术快报|抗体亲和力成熟工业化调控新机制:差异性浆细胞增殖工艺优化思路
java·开发语言·人工智能·算法·机器学习·架构·spark
心中有国也有家8 小时前
AtomGit Flutter 鸿蒙客户端: ChangeNotifier 模式
学习·flutter·华为·harmonyos
luj_17688 小时前
心形曲线轨迹控制三大关键技术
c语言·开发语言·c++·经验分享·算法
取地址符8 小时前
C++学习笔记(基于learn-cxx)(1)
c++·经验分享·笔记·学习
tmlx3I0818 小时前
高光谱拼接算法(六)RANSAC 误匹配剔除
人工智能·算法·机器学习
不相心 -w-8 小时前
基础-滑动窗口-(定长 | 不定长)
算法
醉城夜风~9 小时前
Java详解经典算法题:接雨水(三种实现方案+原理剖析)
java·开发语言·算法
ysa0510309 小时前
【板子】ST表
c++·笔记·算法·板子