当前位置: 首页 > news >正文

二分查找篇——寻找旋转排序数组中的最小值【LeetCode】

153. 寻找旋转排序数组中的最小值


一、算法逻辑(逐步通顺讲解每一步思路)

题目背景是:
一个原本升序排列的数组 nums 被旋转了一次,即它被某个位置劈开后两部分拼接。例如:

原数组:   [1, 2, 3, 4, 5]
旋转后:   [4, 5, 1, 2, 3]

我们需要找到其中最小的元素,并且数组中无重复元素

这段算法使用的是一种略带技巧的「偏左二分写法」,与传统的 left=0, right=n-1 不同,用的是:

left = -1
right = n - 1

✅ 1️⃣ 定义搜索区间

  • left = -1:虚拟出一个位置在数组之外;

  • right = len(nums) - 1:最后一个真实下标;

  • 搜索区间为 (left, right],即右闭左开。

✅ 2️⃣ 二分查找逻辑

每次计算中点 mid = (left + right) // 2,然后根据与 nums[-1](末尾元素)的关系进行判断:

  • nums[mid] < nums[-1],说明最小值一定在左边(含 mid),收缩右边界 right = mid

  • 否则说明最小值在右边(不含 mid),排除左侧区间,更新 left = mid

这样做的核心思想是:

把数组划分为两个区间:大于等于最小值的一段严格小于最小值的一段,通过与末尾元素对比快速定位边界。

✅ 3️⃣ 循环结束

left + 1 == right 时,循环终止,right 就指向整个数组的最小值位置。

✅ 4️⃣ 返回结果

返回 nums[right] 即为最终结果。


二、核心点总结

使用末尾元素 nums[-1] 作为分界线,实现更稳定的二分判断逻辑;
✅ 区间设置为 (left, right],使用 left = -1 是为了避免特殊判断头尾边界,写法简洁统一
✅ 属于 偏左二分查找技巧,尤其适用于搜索单调转折点的题;
✅ 终止条件是 left + 1 == right,使得最终 right 恰好指向最小元素下标。

这是一种非常“干净”的二分思路,在 LeetCode 上用于 rotated array 系列题非常常见。

class Solution:def findMin(self, nums: List[int]) -> int:left, right = -1, len(nums)-1while left+1<right:mid = (left+right)//2if nums[mid]<nums[-1]:right = midelse:left = midreturn nums[right]

三、时间复杂度分析

每次将搜索区间砍半,总共最多 log n 次比较:

时间复杂度:O(log n)


四、空间复杂度分析

仅使用常数个辅助变量:

空间复杂度:O(1)


✅ 总结一句话

这段算法使用「与末尾元素比较 + 偏左二分」策略,巧妙地定位旋转数组中的最小值,时间复杂度 O(log n),空间复杂度 O(1),逻辑简洁、边界统一,是处理旋转数组查找问题的极佳模板。

http://www.dtcms.com/a/272711.html

相关文章:

  • 数学建模-
  • leetcode 3439. 重新安排会议得到最多空余时间 I 中等
  • 征程 6M 部署 Omnidet 感知模型
  • Spark伪分布式集群搭建(Ubuntu系统)
  • 查看uniapp 项目中没有用到依赖
  • CanOpen转EtherCAT网关与台达伺服的配置指南配置软件篇
  • Rust Web 全栈开发(三):使用 Actix 构建简单的 Web Service
  • 【解决方案】基于 Amazon CloudFormation 打造三层 Web 应用架构实战
  • GitHub信息收集
  • 如何利用个人电脑搭建FTP文件服务器实现远程协作
  • 第二章-AIGC入门-AI视频生成:几款实用AI视频生成工具全解析(7/36)
  • 精准估算如何选?功能点与故事点估算法全解析
  • Navicat实现MySQL数据传输与同步完整指南
  • 【Axure教程】中继器间图片的传递
  • Meta新注意力机制给 Transformer 升了级!底层架构的革命!
  • JAVA JVM对象的创建
  • 水陆联防智能升级:AI入侵检测系统守护零死角安全
  • 介绍 cnpm exec electron-packager
  • x86汇编语言入门基础(三)汇编指令篇3 位移运算
  • 【threejs】第一人称视角之八叉树碰撞检测
  • 蜻蜓I即时通讯系统重构宣言:破茧重生的技术革命-长痛不如短痛卓伊凡|麻子|果果
  • 大健康IP如何借“合规创新”抢占行业新风口|创客匠人
  • 解读 Go 中的 constraints包
  • 【TCP/IP】7. IP 路由
  • xml 知识总结: xsd,xsi:schemaLocation,xmlns,xmlns:xsi
  • SpringBoot系列—MyBatis(xml使用)
  • codeforeces Round1032 - Round 1036
  • 【node后端】搭建项目(Express+Ts+Typeorm+Mysql一步到位)
  • 深入浅出 Python Asynchronous I/O:从 asyncio 入门到实战
  • Arc Institute提出首个AIVC虚拟细胞模型STATE