LeetCode 162. 寻找峰值
题目描述
思路分析
✅ 解法:二分查找找上坡的尽头
核心思路:
- 如果
nums[mid] > nums[mid+1]
,说明当前在下降区间,峰值在左边(包含 mid);- 如果
nums[mid] < nums[mid+1]
,说明当前在上升区间,峰值在右边(不包含 mid);
参考代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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 {
// 否则左边有峰值,或 mid 自己就是峰值
right = mid
}
}
// 最终 left == right,返回任意一个峰值下标
return left
}
- 时间复杂度:O(log n)
- 空间复杂度:O(1)
1
write your code here
CC BY-NC-SA 4.0
许可协议,转载请注明出处!
本博客所有文章除特别声明外,均采用