题解 | #寻找峰值#
寻找峰值
https://www.nowcoder.com/practice/fcf87540c4f347bcb4cf720b5b350c76
# # 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 # # # @param nums int整型一维数组 # @return int整型 # class Solution: def findPeakElement(self , nums: List[int]) -> int: # write code here l=0 r=len(nums)-1 while l<r: m=(l+r)//2 if nums[m]<nums[m+1]: l=m+1 # 往右走 else: r=m # 往左走 return l # 最后返回l或者r都可以,因为最终l和r要相遇。
该题相当于以中间的值为'预定峰值',如果m<m+1,l=m+1(峰值),如果m>m+1,r=m(峰值),每次循环都让边界等于’预定峰值‘,最终返回边界。
13行的循环条件是l<r,在上一道题二分查找中循环条件是l<=r,因为在二分查找中,当m不是target时,l或者r等于m的右边值或者是左边值,而在本循环中,可能等于m或者m的右边值,并且当l=r时,正好返回l,这个时候也不需要在循环一次。