🗒️162. 寻找峰值
2024-5-22
| 2024-5-23
0  |  阅读时长 0 分钟
type
status
date
slug
summary
tags
category
icon
password
峰值元素是指其值严格大于左右相邻值的元素。
给你一个整数数组 nums,找到峰值元素并返回其索引。数组可能包含多个峰值,在这种情况下,返回 任何一个峰值 所在位置即可。
你可以假设 nums[-1] = nums[n] = -∞ 。
你必须实现时间复杂度为 O(log n) 的算法来解决此问题。
示例 1:
示例 2:
提示:
  • 1 <= nums.length <= 1000
  • 231 <= nums[i] <= 231 - 1
  • 对于所有有效的 i 都有 nums[i] != nums[i + 1]

按条件遍历一遍

二分查找

为什么这个算法是可以的?
这个有点像高中学的二分法找函数的零点, 对于一个区间 , 可以先计算得到它的中点 (其中 是向下取整操作)。
  1. 如果满足 , 就往右边爬升(之所以对比 和它的右邻居, 是因为 是通过向下取整计算得到的, 在 的情况下肯定会存在右邻居)。
  1. 否则说明 有可能就是峰值, 记录一下位置, 然后往左搜索检查它是不是真的是峰值。
闭区间是,对应的开区间就是
💡
为什么不考虑n-1呢?因为 n-1 的右边是负无穷,一定是满足的 nums[mid] > nums[mid + 1]

📎 参考

  • Important
  • 118. 杨辉三角386. 字典序排数
    Loading...
    目录