LeetCode: 数组峰值与谷值问题总结 - Python

2023-09-14 12:15:37
LeetCode:数组峰值与谷值问题总结

问题描述:

(1)剑指 Offer 11. 旋转数组的最小数字 , 存在重复元素找最小值
(2)LeetCode: 153. 寻找旋转排序数组中的最小值,元素不相同,找最下值
(3)LeetCode: 154. 寻找旋转排序数组中的最小值 II,存在重复元素,找最小值
(4)LeetCode: 162. 寻找峰值,无序,求峰值
(5)LeetCode: 852. 山脉数组的峰顶索引, 找索引

(1)剑指 Offer 11. 旋转数组的最小数字 Python3实现:

class Solution:
    def minArray(self, numbers: List[int]) -> int:
        low, high = 0, len(numbers) - 1
        while low < high:
            pivot = low + (high - low) // 2
            if numbers[pivot] < numbers[high]:
                high = pivot 
            elif numbers[pivot] > numbers[high]:
                low = pivot + 1
            else:
                high -= 1
        return numbers[low]

(2)LeetCode: 153. 寻找旋转排序数组中的最小值 Python3实现:

class Solution:
    def findMin(self, nums: List[int]) -> int:
        left, right = 0, len(nums) - 1          # 左闭右闭区间,如果用右开区间则不方便判断右值
        while left < right:                     # 循环不变式,如果left == right,则循环结束
            mid = (left + right) >> 1           # 地板除,mid更靠近left
            if nums[mid] > nums[right]:         # 中值 > 右值,最小值在右半边,收缩左边界
                left = mid + 1                  # 因为中值 > 右值,中值肯定不是最小值,左边界可以跨过mid
            elif nums[mid] < nums[right]:       # 明确中值 < 右值,最小值在左半边,收缩右边界
                right = mid                     # 因为中值 < 右值,中值也可能是最小值,右边界只能取到mid处
        return nums[left]                       # 循环结束,left == right,最小值输出nums[left]或nums[right]均可

(3)LeetCode: 154. 寻找旋转排序数组中的最小值 II Python3实现:

class Solution:
    def findMin(self, nums: List[int]) -> int:    
        low, high = 0, len(nums) - 1
        while low < high:
            pivot = low + (high - low) // 2
            if nums[pivot] < nums[high]:
                high = pivot 
            elif nums[pivot] > nums[high]:
                low = pivot + 1
            else:
                high -= 1
        return nums[low]

(4)LeetCode: 162. 寻找峰值 Python3实现:

class Solution:
    def findPeakElement(self, nums):
        low, high = 0, len(nums) - 1
        while low < high: 
            mid = (low + high) // 2
            if nums[mid] > nums[mid + 1]:
                high = mid
            else:
                low = mid + 1
        return low

(5)LeetCode: 852. 山脉数组的峰顶索引 Python3实现:

class Solution:
    def peakIndexInMountainArray(self, arr: List[int]) -> int:
        n = len(arr)
        low = 0
        high = n - 1
        while low < high:
            mid = (low + high) // 2
            if arr[mid] > arr[mid+1]:
                high = mid
            else:
                low = mid + 1
        return low

相关参考:
声明: 总结学习,有问题或不当之处,可以批评指正哦,谢谢。

更多推荐

Confidential Compute Architecture - Arm构架的TEE新模式

1简介如今,云计算在分布式计算资源按需使用方面起着重要的作用。许多公司,如亚马逊、谷歌或微软都提供云服务,但使用这些服务需要信任服务提供商。这意味着一方面依赖提供商对抗攻击者,但另一方面也要信任提供商本身。恶意的提供商可能最终滥用其客户的敏感数据。使用可信执行环境(TEE)可以帮助增加对提供商的信任。在传输过程中,通常

C++——string的模拟实现+详细讲解

文章目录迭代器构造函数拷贝构造函数赋值运算符重载函数析构函数获取字符串函数获取字符串的字符个数访问类对象中的成员实现对类对象中成员的访问和操作实现对类对象中的成员的常量访问字符串容量调整字符串大小调整尾部插入字符尾部插入字符串重载函数符+=字符串尾部添加字符字符串尾部添加字符串指定位置插入字符指定位置插入字符串删除指定

【数据结构】二叉树链式结构的实现(三)

目录一,二叉树的链式结构二,二叉链的接口实现1,二叉链的创建2,接口函数3,动态创立新结点4,创建二叉树5,前序遍历6,中序遍历7,后序遍历三,结点个数以及高度等1,接口函数2,结点个数3,叶子结点个数4,二叉树高度5,二叉树第k层结点个数6,二叉树查找值为x的结点一,二叉树的链式结构二叉树的链式存储结构是指,用链表来

CFimagehost私人图床本地部署结合cpolar内网穿透实现公网访问

文章目录1.前言2.CFImagehost网站搭建2.1CFImagehost下载和安装2.2CFImagehost网页测试2.3cpolar的安装和注册3.本地网页发布3.1Cpolar临时数据隧道3.2Cpolar稳定隧道(云端设置)3.3.Cpolar稳定隧道(本地设置)4.公网访问测试5.结语1.前言图片服务器

STC单片机定时器0手动状态脉冲定时器2自动状态脉冲加减速控制

/***定时器0中断运行函数判断电机运行为一启动输出***///ManuMTARUN_FLAG手动定时器电机A运行标志M_Speed//ManuMTBRUN_FLAG手动定时器电机B运行标志//a1=XAddSpeed;//X加速系数送缓冲器201845//b1=YAddSpeed;//Y加速系数送缓冲器201845v

C++学习(1)

一、C++概述(了解)C++在C语言的基础上添加了面向对象编程和泛型编程的支持二、helloword程序(掌握)#define_CET_SECURE_NO_WARNINGS//在开发软件visualstudio编译c文件时,visualstudio认为strcpy,scanf等函数不安全的导致报警告和错误,导致无法编译

CPP-Templates-2nd--第十一章 泛型库

目录11.1可调用对象(Callables)11.1.1函数对象的支持11.1.2处理成员函数以及额外的参数11.1.3函数调用的包装11.2其他一些实现泛型库的工具11.2.1类型萃取11.2.2std::addressoff()11.2.3std::declval()11.3完美转发临时变量11.4作为模板参数的引

NK试剂盒使用注意事项及NK细胞培养攻略

NK细胞自然杀伤细胞(Naturalkillercell,NK细胞),是除T细胞、B细胞之外的第三大类淋巴细胞,不表达T细胞和B细胞所特有的膜表面分子。无需抗原的预先刺激与活化即可直接杀伤被病毒感染的自身细胞或肿瘤细胞,与抗肿瘤、抗感染和免疫调节有关,是固有免疫最重要的组成成分之一。NK细胞大概约占外周血淋巴细胞的10

MongoDB性能分析

mongostatmongostat是mongdb自带的状态检测工具,在命令行下使用。它会间隔固定时间获取mongodb的当前运行状态,并输出。如果你发现数据库突然变慢或者有其他问题的话,你第一手的操作就考虑采用mongostat来查看mongo的状态。它的输出有以下几列:inserts/s:每秒插入次数query/s

nvm下载安装教程

前言nvm官网地址:https://nvm.uihtm.com一、nvm下载进入nvmgithub地址,下载最新版本:https://github.com/coreybutler/nvm-windows/releases点击选择当前最新版本。滑动到底部,点击nvm-setup.exe下载安装文件。接受,下一步。选择nv

中国式现代化落地社区的“3510”模式示范点在烟台正式启动

第一个中国式现代化落地社区(村居)、家庭和养老(托幼)的“3510”模式示范点——烟台市莱山区迎春佳苑智慧社区、智慧家庭、智慧养老综合服务中心于9月16日正式启动!山东省人大城环委原副主任委员尚龙江,淄博市卫健委原主任、二级巡视员宋晓东,烟台市民政局局长卢国栋,莱山区区委书记罗建,莱山区区长蒋海华,河北省山东商会副会长

热文推荐