题解 | #寻找峰值#
寻找峰值
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