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