题解 | #寻找峰值#
寻找峰值
https://www.nowcoder.com/practice/fcf87540c4f347bcb4cf720b5b350c76
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
#
# @param nums int整型一维数组
# @return int整型
#
# 如果某个位置的变化趋势是上升的,那么就把左下标变为该下标+1
# 如果变化趋势是下降的,那么就把右下标变为该下标-1
class Solution:
def findPeakElement(self , nums: List[int]) -> int:
n = len(nums)
if n == 1:
return 0
l, r = 0, n - 1
if nums[0] > nums[1]:
return 0
else:
dl = 1
if nums[-1] > nums[-2]:
return n-1
else:
dr = -1
while l <= r:
if l == r:
return l
m = (l + r) // 2
if nums[m] > nums[m-1] and nums[m] > nums[m+1]:
return m
elif nums[m] > nums[m-1]:
l = m + 1
elif nums[m] > nums[m+1]:
r = m - 1
return l if nums[l] > nums[r] else r

