162. Find Peak Element

25 年 8 月 26 日 星期二
257 字
2 分钟

162. Find Peak Element

Screenshot 2025-08-26 at 11.03.52 am

虽然这题不是递增数组,但是这个数组依然能按照二分的思想分成两份。选一个Mid,根据midmid+1的数值判断mid是在峰顶左侧(上坡)还是峰顶右侧(下坡),如果mid在峰顶左侧,那么mid左边的值都在峰顶右侧(因为我们只需要找任意一个峰顶就行)。e.g. 1, 2, 1, 4有两个峰顶,按照这个算法,得出的结果应该是2这个峰顶。判断完mid左侧为红色之后,继续判断右侧的未知颜色。如果mid在峰顶右侧或者mid就是峰顶,那么判断左侧未知属性。

python
class Solution:
    def findPeakElement(self, nums: List[int]) -> int:
        left = 0
        n = len(nums)
        right = n-2 # n-1 必定为蓝色, 并且防止越界
        while left <= right:
            mid = (left + right) // 2
            v = nums[mid]
            nxt = nums[mid + 1]
            if v < nxt:
                # 左侧:红色
                left = mid + 1
            else:
                # 右侧: 蓝色
                right = mid - 1
        return left

文章标题:162. Find Peak Element

文章作者:Sirui Chen

文章链接:https://blog.siruichen.me/posts/162_find_peak_element[复制]

最后修改时间:


商业转载请联系站长获得授权,非商业转载请注明本文出处及文章链接,您可以自由地在任何媒体以任何形式复制和分发作品,也可以修改和创作,但是分发衍生作品时必须采用相同的许可协议。
本文采用CC BY-NC-SA 4.0进行许可。