题解 | #寻找峰值#

寻找峰值

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,这个时候也不需要在循环一次。

全部评论

相关推荐

点赞 评论 收藏
转发
点赞 收藏 评论
分享
牛客网
牛客企业服务