力扣刷题TOP101:18.BM21 旋转数组的最小数字

目录:

目的

思路

复杂度

记忆秘诀

python代码

目的:

旋转数组 [3,4,5,1,2] 的最小值是 1。


思路

这个任务是找到部分有序数组的最小值。你来到一家超市,这里的商品价格原本是按照顺序从便宜到贵摆放的,但有个手欠的人,把一部分商品挪到了前面,现在你想要找到最便宜的(最小值)。虽然顺序被打乱了,但你发现了超市的商品摆放仍然是部分有序的。你决定用二分查找法快速锁定价格最低的商品。


左手右手一个慢动作​​​​​:

  • 左手:一开始放在第一个上(left = 0)。
  • 右手:放在最后一个上(right = len(nums) - 1)。
  • 用两只手的距离找到中间位置mid)。从中间开始判断最便宜的商品在哪边。

右手左手慢动作重播:

  • 如果中间价格比右手的贵:说明最便宜的商品在右边的范围内(右手指着的范围更便宜)。左手移动到 mid + 1,缩小范围。
  • 如果中间价格比右手的便宜:说明最便宜的商品在左边的范围内(包含中间标签)。右手移动到 mid,缩小范围。
  • 如果中间价格和右手价格一样:你无法确定最便宜的商品在哪边,只能让右手往左挪一格(缩小范围)。

给你快乐你有没有爱上我:当两只手指向同一个商品时,这一定是最便宜的!


复杂度

  • 时间复杂度:O(log n

    • 因为每次查找都将查找范围缩小一半。
  • 空间复杂度:O(1)

    • 只使用了常数级别的额外空间。

记忆秘诀

  • 左小右大分半查,最小藏在变乱家。
  • 大往右移,小收左区,相等右退避。
  • 左右合并不再差,结果就在左手下。

python代码

#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 
# @param nums int整型一维数组 
# @return int整型
#
class Solution:def minNumberInRotateArray(self, nums: List[int]) -> int:if not nums:return 0  # 或者根据需要返回一个合适的值left, right = 0, len(nums) - 1while left < right:mid = left + (right - left) // 2# 如果中间元素大于右边元素,最小值在右边if nums[mid] > nums[right]:left = mid + 1# 如果中间元素小于右边元素,最小值在左边elif nums[mid] < nums[right]:right = midelse:right -= 1  # 当 nums[mid] == nums[right] 时,不能确定最小值的位置,缩小右边界return nums[left]

ps: python还有最简单的办法直接获得数组的最小值:(适合笔试)

return min(num)

* 欢迎大家探讨新思路,能够更好的理解和记忆

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/35694.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

26.删除有序数组中的重复项 python

删除有序数组中的重复项 题目题目描述示例 1&#xff1a;示例 2&#xff1a;提示&#xff1a;题目链接 题解解题思路python实现代码解释提交结果 题目 题目描述 给你一个 非严格递增排列 的数组 nums &#xff0c;请你 原地 删除重复出现的元素&#xff0c;使每个元素 只出现…

R语言 | 峰峦图 / 山脊图

目的&#xff1a;为展示不同数据分布的差异。 1. ggplot2 实现 # 准备数据 datmtcars[, c("mpg", "cyl")] colnames(dat)c("value", "type") head(dat) # value type #Mazda RX4 21.0 6 #Mazda RX4 Wag …

四川创新志成健康管理有限公司

四川创新志成健康管理有限公司 成都市青羊区广富路168号 公司简介 四川创新志成健康管理有限公司成立于2021年&#xff0c;公司专注体外诊断领域&#xff0c;致力为医学实验室、生产厂家、 经销商提供专业的学术、技术增值服务&#xff0c;涵盖免疫、生化、输血等检测领域&a…

系统级 I/O

Unix I/O **了解 Unix I/O 将帮助你理解其他的系统概念。**I/O 是系统操作不可或缺的一部分。我们经常遇到 I/O 和其他系统概念之间的循环依赖。例如&#xff0c;I/O 在进程的创建和执行中扮演着关键的角色。反过来&#xff0c;进程创建又在不同进程间的文件共享中扮演着关键角…

Elasticsearch:使用阿里 infererence API 及 semantic text 进行向量搜索

在之前的文章 “Elasticsearch 开放推理 API 新增阿里云 AI 搜索支持”&#xff0c;它详细描述了如何使用 Elastic inference API 来针对阿里的密集向量模型&#xff0c;稀疏向量模型&#xff0c; 重新排名及 completion 进行展示。在那篇文章里&#xff0c;它使用了很多的英文…

基于公网的无线全双工内部通话系统在演出行业可以用吗?

文旅名城再出发&#xff0c;更待“烟花”绽繁花 2024年4月将开业的扬州首个大型沉浸式剧场-《运河密城》 以运河为原点 追随河的记忆 从春秋时代的吴王夫差 到贯通南北的大运河成形 穿梭时空 探索扬州的前世今生 「运河第一锹」古运河旁 有一处新地标正在悄然兴起 如…

POSTGRESQL跟ORACLE语法区别和相同之处

跟ORACLE语法区别之处 1. Update和delete语法区别 Pg 和MySQL Update和delete的时候表名不能加别名 2. 插入数字类型不一样 ORACLE 对number类型的数据可以用’’ 字符串标记插入&#xff0c;但是PG不行&#xff0c;必须要进行正确的数据类型 3. SEQ使用不同 ORACEL的SEQ…

C++编程物联网:舵机VS步进电机

舵机和步进电机都是常见的电机类型,它们在自动化和机器人控制中有着不同的应用场景。两者的主要区别在于控制方式、运动精度、适用范围等方面。下面详细介绍它们的作用、应用场景和主要区别。 1. 舵机(Servo Motor) 工作原理 舵机是一种具有反馈控制的电动机,通常由电动…

鸿翼参与撰写档案数据管理与长期保存策略基于数字中国战略的研究

​编者按&#xff1a;近日&#xff0c;由中国财富出版社有限公司出版的《档案数据管理与长期保存策略——基于数字中国战略的研究》正式发行&#xff0c;上海鸿翼软件技术股份有限公司董事长兼CEO龙凌云作为核心作者参与主要编写工作。 本书是在国家档案局立项科研项目“数字档…

机器学习中的图匹配问题—基础学习

机器学习中的图匹配问题 结合导师所给的方向&#xff0c;能否将实例之间的点匹配问题转换为点到实例之间的匹配问题来进行求解呢&#xff1f;这里结合师姐推荐的讲座首先对图匹配的这个方向来进行简单的了解和接触。 图匹配问题概述 图匹配就是&#xff1a;不仅考虑点之间的配…

2024.11.29——[HCTF 2018]WarmUp 1

拿到题&#xff0c;发现是一张图&#xff0c;查看源代码发现了被注释掉的提示 <!-- source.php--> step 1 在url传参看看这个文件&#xff0c;发现了这道题的源码 step 2 开始审计代码&#xff0c;分析关键函数 //mb_strpos($haystack,$needle,$offset,$encoding):int|…

gRPC 快速入门 — SpringBoot 实现(1)

目录 一、什么是 RPC 框架 &#xff1f; 二、什么是 gRPC 框架 &#xff1f; 三、传统 RPC 与 gRPC 对比 四、gRPC 的优势和适用场景 五、gRPC 在分布式系统中应用场景 六、什么是 Protocol Buffers&#xff08;ProtoBuf&#xff09;&#xff1f; 特点 使用场景 简单的…

工具篇--GitHub Desktop 使用

文章目录 前言一、GitHub Desktop 的使用&#xff1a;1.1 通过官网下载GitHub Desktop和安装&#xff1a;1.2 安装和使用&#xff1a;1.2.1 填充自己的标识&#xff1a;1.2.3 克隆项目&#xff1a;1.2.4 git 常用忽略项配置&#xff1a; 二、代码的更新和提交&#xff1a;2.1 代…

MySQL事物隔离级别详细解释

目录 事务隔离级别总结 实际情况演示 脏读(读未提交) 避免脏读(读已提交) 不可重复读 可重复读 幻读 解决幻读的方法 事务隔离级别总结 SQL 标准定义了四个隔离级别&#xff1a; READ-UNCOMMITTED(读取未提交) &#xff1a;最低的隔离级别&#xff0c;允许读取尚未提…

[每周一更]-(第126期):MQ解耦场景

消息队列&#xff08;MQ&#xff09;解耦是一种软件架构设计模式&#xff0c;主要通过中间件将系统中的生产者和消费者模块分离&#xff0c;减少模块之间的直接依赖&#xff0c;使系统具有更高的扩展性和灵活性。这种模式尤其适用于需要处理复杂业务逻辑、频繁请求或异步处理的…

Redis的高可用之哨兵模式

Redis哨兵主要是解决Redis主从同步时主数据库宕机问题,使其能够自动进行故障恢复&#xff0c;提高Redis系统的高可用性。 1. 哨兵的作用&#xff1a; 监控&#xff1a;哨兵通过心跳机制监控主库和从库的存活性。 选主&#xff1a;当主库宕机时&#xff0c;哨兵会选举出一个领…

知识分享|一文了解实时荧光定量PCR(qPCR)技术的原理与分类

实时荧光定量PCR技术(Realtime quantitative PCR&#xff0c;qPCR)是在PCR反应体系中添加荧光报告基团和荧光淬灭基团&#xff0c;通过荧光信号来实现对核酸分子的定量检测过程在反应过程中&#xff0c;PCR产物随着扩增反应的进行不断生成&#xff0c;荧光信号不断增加&#xf…

【MySQL】环境变量配置

环境变量英文名SystemRoot&#xff0c;直译为“系统总&#xff08;根&#xff09;目录"&#xff0c;主要指明操作系统的重要目录在哪里。那么配置MySQL的环境变量&#xff0c;就是在程序运行时&#xff0c;告诉操作系统你的MySQL目录位置。 复制MySQL安装目录&#xff1a;…

高级 CEF 内核集成与 VC++——开发环境搭建与配置

开发环境的搭建是 CEF 浏览器开发中至关重要的一步。正确配置开发环境不仅能提高开发效率&#xff0c;也能确保开发过程中的稳定性与可靠性。本文将结合最新的资料和技术方案&#xff0c;深入讲解如何搭建 CEF 编译与配置环境&#xff0c;正确配置 Windows SDK 与依赖库&#x…

【React】组件通讯有哪几种方式?

文章目录 一、父子组件通讯二、兄弟组件通讯3、context 跨级组件通讯 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、父子组件通讯 父组件 ----> 子组件&#xff1a; props 父组件提供要传递的 state 数据 给子组件标签添加属性&#xff0c;值…