【LeetCode】162. 寻找峰值

1. 题目

2. 分析

这道题的难点有二:第一,知道用二分法求解;第二,二分判断的标准是什么?传统的题目的二分标注都是跟某个固定的值做比较,但是此题不然。此题的比较对象是相邻的元素

不要硬凭自己的脑子想,要结合题意,将分析落到纸上。

3. 代码

根据上面的分析,那么可以得到下面这个代码:

python 复制代码
class Solution:
    def findPeakElement(self, nums: List[int]) -> int:
        left = 0
        right = len(nums)-1

        if len(nums) == 1:
            return 0     
        if len(nums) == 2:
            if nums[0] > nums[1] :
                return 0
            else:
                return 1        
        while(left <= right):
            mid = (left + right) // 2
            if mid == 0:
                if nums[mid] > nums[mid+1]:
                    return 0
            if mid == len(nums) - 1:
                if nums[mid] > nums[mid-1]:
                    return mid
            if nums[mid-1] < nums[mid] < nums[mid+1]:
                left = mid+1
            elif nums[mid-1] > nums[mid] > nums[mid+1]:
                right = mid-1
            elif nums[mid-1] < nums[mid] and nums[mid] > nums[mid+1]:
                return mid
            else: # 先减后增
                left = mid+1

上面这个代码一堆if-else,显然不够优雅。可以看到其主要拙劣的地方在于对mid 值的判断。借鉴一下官方题解中的代码:

写的确实比我的代码好。

相关推荐
余俊晖1 小时前
英伟达开源多模态视觉语言模型-Nemotron Nano V2 VL模型架构、训练方法、训练数据
人工智能·算法·语言模型·自然语言处理·多模态
2501_941111461 小时前
C++中的原型模式
开发语言·c++·算法
高洁011 小时前
国内外具身智能VLA模型深度解析(2)国外典型具身智能VLA架构
深度学习·算法·aigc·transformer·知识图谱
一只会写代码的猫1 小时前
C# 性能优化:从垃圾回收到多线程并发
jvm·算法
学生小羊2 小时前
A. C05.L08.贪心算法入门
算法·贪心算法
AndrewHZ2 小时前
【图像处理基石】图像连通域计算:原理、算法实现与应用全解析
图像处理·算法·计算机视觉·cv·算法原理·视觉算法·连通域计算
Dev7z2 小时前
基于Matlab遗传算法与蚁群算法的风光储并网微电网容量优化研究
算法·matlab·蚁群算法·多能源微电网
一直在努力的小宁3 小时前
《代码随想录-精华内容提取》07 二叉树
数据结构·算法·链表·面试
多彩电脑3 小时前
死循环逻辑检测
数据结构·python·算法·动态规划
cs麦子3 小时前
C语言--详解--冒泡排序(Bubble Sort)
c语言·算法·排序算法