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

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

题目:寻找峰值

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

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

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

你必须实现时间复杂度为 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)

相关推荐
fff9811182 小时前
C++与Qt图形开发
开发语言·c++·算法
Nan_Shu_6142 小时前
学习:Cesium (3)
学习
计算机安禾2 小时前
【数据结构与算法】第3篇:C语言核心机制回顾(二):动态内存管理与typedef
c语言·开发语言·数据结构·c++·算法·链表·visual studio
njidf3 小时前
C++中的访问者模式
开发语言·c++·算法
C_Si沉思3 小时前
C++中的工厂模式变体
开发语言·c++·算法
C羊驼3 小时前
C语言学习笔记(十五):预处理
c语言·经验分享·笔记·学习·算法
m0_569881473 小时前
C++中的适配器模式变体
开发语言·c++·算法
NAGNIP3 小时前
面试官:正则化都有哪些经典的方法?
算法·面试
Theodore_10224 小时前
深度学习(12)正则化线性回归中的偏差与方差调试
人工智能·深度学习·算法·机器学习·线性回归