寻找峰值
给定一个长度为n的数组nums,请你找到峰值并返回其索引。数组可能包含多个峰值,在这种情况下,返回任何一个所在位置即可。
1.峰值元素是指其值严格大于左右相邻值的元素。严格大于即不能有等于
2.假设 nums[-1] = nums[n] = -inf
3.对于所有有效的 i 都有 nums[i] != nums[i + 1]
进阶:时间复杂度 O(logN)Last updated
给定一个长度为n的数组nums,请你找到峰值并返回其索引。数组可能包含多个峰值,在这种情况下,返回任何一个所在位置即可。
1.峰值元素是指其值严格大于左右相邻值的元素。严格大于即不能有等于
2.假设 nums[-1] = nums[n] = -inf
3.对于所有有效的 i 都有 nums[i] != nums[i + 1]
进阶:时间复杂度 O(logN)Last updated
class Solution:
def findPeakElement(self , nums: List[int]) -> int:
l, r = 0, len(nums) - 1
while l < r:
m = (l + r) // 2
if nums[m] < nums[m + 1]: # 上坡;因为 l < r,所以 m+1 不会越界
l = m + 1
else: # 下坡
r = m
if m == 0 or nums[m - 1] < nums[m]: # 这段去掉也能 AC
return m
return l