LeetCode 162. 寻找峰值
题目描述
思路分析
为了找到峰值元素,我们可以使用二分查找的方法。具体思路如下:
- 初始化边界:设置
left
为0
,right
为len(nums) - 1
。- 二分查找:
- 计算中间索引
mid = (left + right) / 2
。- 检查
nums[mid]
和其右侧元素nums[mid + 1]
:
- 如果
nums[mid] < nums[mid + 1]
,说明峰值在右侧,因此将left
更新为mid + 1
。- 否则,说明峰值在左侧或当前元素就是峰值,因此将
right
更新为mid
。- 结束条件:当
left
等于right
时,返回left
作为峰值的索引。
参考代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
func findPeakElement(nums []int) int {
left, right := 0, len(nums)-1
for left < right {
mid := (left + right) / 2
// 如果中间元素小于右侧元素,说明峰值在右侧
if nums[mid] < nums[mid+1] {
left = mid + 1
} else {
// 否则,峰值在左侧或当前元素就是峰值
right = mid
}
}
return left
}
- 时间复杂度:O (log n),因为每次都将搜索范围缩小一半。
- 空间复杂度:O (1),只使用了常数级别的额外空间。
1
write your code here
CC BY-NC-SA 4.0
许可协议,转载请注明出处!
本博客所有文章除特别声明外,均采用