寻找峰值
字数 874 2025-10-27 17:27:05

寻找峰值

题目描述:给定一个整数数组nums,其中相邻元素不相等。请你找到任意一个峰值元素并返回其索引。峰值元素是指其值严格大于左右相邻值的元素。数组可能包含多个峰值,返回任意一个峰值的位置即可。对于数组边界元素,可以认为nums[-1] = nums[n] = -∞。

解题过程:

  1. 理解问题:峰值元素需要大于其左右邻居。由于数组边界外的元素被视为负无穷,因此第一个元素只需大于第二个元素,最后一个元素只需大于倒数第二个元素,就能成为峰值。

  2. 关键观察:由于相邻元素不相等,数组中的数值变化是连续的"上升"或"下降"趋势。只要存在上升趋势,沿着上升方向就一定能找到峰值。

  3. 二分查找应用:

    • 初始化left=0, right=n-1
    • 当left < right时循环:
      a. 计算中点mid = left + (right-left)/2
      b. 比较nums[mid]和nums[mid+1]:
      • 如果nums[mid] > nums[mid+1],说明mid处于下降趋势,峰值在左侧(可能是mid本身),令right=mid
      • 如果nums[mid] < nums[mid+1],说明mid处于上升趋势,峰值在右侧,令left=mid+1
    • 循环结束时left==right,该位置就是峰值
  4. 正确性证明:每次迭代都保证峰值存在于[left,right]区间内。当nums[mid] > nums[mid+1]时,mid可能是峰值,且左侧必有峰值;当nums[mid] < nums[mid+1]时,右侧必有峰值。

  5. 示例演示:
    数组[1,2,3,1]

    • 初始:left=0, right=3, mid=1 → nums[1]=2 < nums[2]=3 → left=2
    • 第二轮:left=2, right=3, mid=2 → nums[2]=3 > nums[3]=1 → right=2
    • 结束:返回索引2(值为3的峰值)
  6. 复杂度分析:时间复杂度O(log n),空间复杂度O(1),满足高效查找要求。

寻找峰值 题目描述:给定一个整数数组nums,其中相邻元素不相等。请你找到任意一个峰值元素并返回其索引。峰值元素是指其值严格大于左右相邻值的元素。数组可能包含多个峰值,返回任意一个峰值的位置即可。对于数组边界元素,可以认为nums[ -1] = nums[ n ] = -∞。 解题过程: 理解问题:峰值元素需要大于其左右邻居。由于数组边界外的元素被视为负无穷,因此第一个元素只需大于第二个元素,最后一个元素只需大于倒数第二个元素,就能成为峰值。 关键观察:由于相邻元素不相等,数组中的数值变化是连续的"上升"或"下降"趋势。只要存在上升趋势,沿着上升方向就一定能找到峰值。 二分查找应用: 初始化left=0, right=n-1 当left < right时循环: a. 计算中点mid = left + (right-left)/2 b. 比较nums[ mid]和nums[ mid+1 ]: 如果nums[ mid] > nums[ mid+1 ],说明mid处于下降趋势,峰值在左侧(可能是mid本身),令right=mid 如果nums[ mid] < nums[ mid+1 ],说明mid处于上升趋势,峰值在右侧,令left=mid+1 循环结束时left==right,该位置就是峰值 正确性证明:每次迭代都保证峰值存在于[ left,right]区间内。当nums[ mid] > nums[ mid+1]时,mid可能是峰值,且左侧必有峰值;当nums[ mid] < nums[ mid+1 ]时,右侧必有峰值。 示例演示: 数组[ 1,2,3,1 ] 初始:left=0, right=3, mid=1 → nums[ 1]=2 < nums[ 2 ]=3 → left=2 第二轮:left=2, right=3, mid=2 → nums[ 2]=3 > nums[ 3 ]=1 → right=2 结束:返回索引2(值为3的峰值) 复杂度分析:时间复杂度O(log n),空间复杂度O(1),满足高效查找要求。