发布时间:2026/8/27 19:24:15
LeetCode 153:找旋转排序数组中的最小值(二分查找) —— 题解 欢迎阅读 欢迎来到「寻找旋转排序数组中的最小值」题解之旅本文将带你从在旋转过的有序序列中找最小元素这一直观场景出发深入理解二段性二分的巧妙运用并掌握如何与右端点比较判断所在段来在 O(log n) 内定位最小值。在开始之前建议你先了解题目背景这是 LeetCode 153 题给定无重复的旋转排序数组nums原升序数组在某点旋转返回最小元素。本质上数组由两段递增拼接而成最小值是两段的分界点问题转化为二分找到二段性的边界。明确学习目标掌握与右端点比较的二分模板理解为什么不能用左端点比较并熟练处理未旋转与单元素等边界情况。准备好环境建议在本地 IDE 或 LeetCode 在线编辑器中打开代码边看边运行亲手验证示例如nums [3,4,5,1,2]输出1nums [4,5,6,7,0,1,2]输出0。本文将从问题转化、右端点判据、区间收缩、返回结果到代码实现层层递进。即使你对二段性二分还不熟悉我们也会从比右端点大的在左边那段比它小的在右边那段这一直觉出发让你轻松抓住核心思想——与右端比大小分界点即最小值。现在让我们一起二分定位找出旋转数组的最小值吧 一.题目153. 寻找旋转排序数组中的最小值 - 力扣LeetCode​二.做题思路一、问题分析前置分析题目要求在旋转排序数组无重复由升序数组旋转得到中返回最小元素。关键约束数组无重复元素由两段递增组成最小值是两段的分界点。核心思路取右端点 x nums[n-1]为基准数组可分为两段——第一段元素都 x第二段元素都 x含最小值二分找分界点。二、算法策略右端点基准二分核心步骤初始化left 0、right n - 1取基准x nums[right]。二分收敛while (left right)mid下取整left (right - left) / 2。段判断nums[mid] x→ mid 在第一段较大段最小值在右半left mid 1nums[mid] x→ mid 在第二段较小段含最小值right mid。返回循环结束后nums[left]即最小值。示例执行过程nums [3,4,5,1,2]x nums[4] 2阶段leftrightmidnums[mid] vs x操作结果①0425 2第一段收缩左侧left3②3431 ≤ 2第二段收缩右侧right3收敛33——返回 nums[3]11三、正确性说明简单版本二段性成立无重复时旋转数组所有元素中大于右端点的都在第一段旋转前的左侧大数小于右端点的都在第二段旋转后的最小值及其右侧判据nums[mid] x恰好区分两段不会误判。最小值必在第二段最小值 ≤ 右端点除非数组未旋转此时最小值是首元素同样 ≤ x所以nums[mid] x时保留 mid 向左收敛不会漏掉最小值。收缩方向正确第一段丢弃左半第二段保留 mid区间单调收敛到第二段起点即最小值不漏解。终止性left mid 1与right mid下取整保证mid right均严格缩小不会死循环。四、实现细节边界防护初始化left 0、right n - 1、x nums[right]。边界防护n 1时循环不进入返回nums[0]未旋转数组完全升序时所有元素 ≤ x二分会收敛到left 0返回最小值无重复保证nums[mid] x不会出现除 mid right 时但 mid right 恒成立。复杂度时间 O(log n)每次排除一半空间 O(1)仅常数个变量。关键判断if (nums[mid] x) left mid 1; else right mid;段判断收敛、while (left right)循环边界。五、返回值目标映射返回nums[left]最小元素本身对应题目返回数组中的最小元素。三.代码class Solution { public: int findMin(vectorint nums) { int left 0; // 区间左端点 int n nums.size(); int right n - 1; // 区间右端点 int x nums[right]; // 基准右端点值用于划分两段 // 1. 二段性二分与右端点比较判断 mid 在较大段还是较小段 while (left right) { int mid left (right - left) / 2; // mid 下取整配合 right mid if (nums[mid] x) { left mid 1; // 较大段最小值在右半丢弃左半含 mid } else { right mid; // 较小段含最小值保留 mid 向左收敛 } } // 2. 收敛点即最小值所在位置 return nums[left]; } };四、易错点分析难点1为什么基准必须选右端点而非左端点int x nums[right]; // 右端点 if (nums[mid] x) // 判据选右端点作基准时旋转数组天然形成大于 x 的一段 小于 x 的一段的二段性无重复。若选左端点当数组未旋转完全升序时所有元素都 ≥ 左端点判据nums[mid] nums[left]恒为真二分只会一路向右收缩最终错误收敛到末尾最大值。右端点基准则天然覆盖未旋转情形此时最小值就是首元素二分会收敛到 left0。难点2为什么nums[mid] x时可以直接保留 midelse { right mid; // nums[mid] xmid 可能在最小值或其右侧 }由于无重复nums[mid] x说明 mid 在第二段最小值右侧或恰为最小值nums[mid] x只在 mid right 时成立而mid right恒成立故实际只会出现。最小值 ≤ x 恒成立所以保留 mid 向左收敛不会把最小值排除在区间外。难点3nums[mid] x时为什么可以安全丢弃左半if (nums[mid] x) left mid 1;nums[mid] x说明 mid 在第一段旋转点之前的升序大数段。第一段的最小值即首元素也大于 x而真正的全局最小值在第二段所以整个左半含 mid都不可能含最小值可安全丢弃——这正是二段性带来的确定性排除。难点4未旋转数组的隐式处理无需特判// nums [11,13,15,17]x 17 // 所有 nums[mid] x二分一路 right mid收敛到 left 0未旋转时数组完全升序最小值就是nums[0]。由于所有元素 ≤ x判据永远走else分支区间持续向左收敛到 0返回首元素即最小值。若误加先判断是否旋转的特判不仅多余还可能因边界访问引入 bug。五、流程图 闭幕 恭喜你完成了「寻找旋转排序数组中的最小值」问题的学习为了巩固知识并进一步拓展建议你动手实践在 LeetCode 上提交代码尝试不同的测试用例。深入思考本题利用旋转数组的二段性最小值左侧所有元素都大于右侧所有元素通过将nums[mid]与右端点值x nums[right]比较来判断mid在哪一段。为什么选择右端点作为基准而不是左端点如果用左端点做比较会遇到什么问题当nums[mid] x时执行left mid 1否则执行right mid。为什么当nums[mid] x时最小值一定在mid左侧含mid请从数组两段的数值大小关系解释。如果数组未旋转即升序数组代码是否仍然正确收敛点会是哪个位置请验证。本题要求返回最小值数值如果要求返回最小值的下标代码只需改动哪一处延伸挑战如果题目改为寻找旋转排序数组中的最大值你能否仅修改比较基准和收缩方向来实现请描述具体改动。如果数组包含重复元素例如[2,2,2,0,2]当前的nums[mid] x判断逻辑还正确吗应如何改进如果你觉得本文对你有所帮助欢迎点赞 / 收藏关注作者获取更多题解留言交流你的疑问或优化思路深入思考答案选择右端点作为基准是因为旋转数组的右端点位于较小段最小值所在段与mid比较能清晰判断mid在较大段还是较小段若用左端点当mid处于较小段时nums[mid] nums[left]也能判断但需要额外处理未旋转的情况且代码分支会变复杂。当nums[mid] x时说明mid位于较小段因为较小段的所有值都 ≤ x而最小值就在mid的左侧含mid因此right mid向左收敛不会丢失最小值。未旋转时正确数组升序右端点x为最大值nums[mid] x恒为假因此right不断左移最终left收敛到 0返回nums[0]为最小值正确。若返回下标只需将return nums[left]改为return left。延伸挑战答案挑战1找最大值可将基准改为左端点比较nums[mid]与nums[left]若nums[mid] nums[left]最大值在右半left mid否则最大值在左半right mid - 1注意上取整避免死循环。挑战2重复元素会破坏二段性如[2,2,2,0,2]nums[mid] x无法判断方向需将right--来逐步消除重复退化为 O(n) 的最坏情况但平均仍较快。祝你在算法之路上越走越稳早日攻克每一道难题下次见 ✨

相关新闻

2026/8/27 19:24:15

蓝桥杯单片机国赛备考:从模块化设计到实时系统架构的工程实践

1. 从“真题”到“实战”:第五届国赛的独特价值与备考定位 如果你正在准备蓝桥杯单片机国赛,手头肯定不缺历年真题。但第五届国赛的真题,在我看来,是承前启后的一个关键节点。它不像早期几届那样,还在摸索题型和难度&a…

2026/8/27 19:24:15

embOS-MPU:RTOS内存保护单元实现任务级安全隔离实践

1. 为什么嵌入式系统突然需要“安全”了做嵌入式开发十来年,早年我们聊“嵌入式安全”,大家第一反应就是给设备加把锁、把固件加密、防抄板。但随着物联网设备大规模铺开,事情早就变了。现在终端设备面临的威胁不是“能不能被拆开读写Flash”…

2026/8/27 20:04:18

数学建模竞赛中缺失值处理的系统方法:从诊断到验证的完整指南

1. 项目概述:为什么缺失值处理是数模竞赛的“胜负手”?在数学建模竞赛里,尤其是像国赛、美赛这类高强度、短周期的比赛中,拿到手的数据往往不是“干净”的。你可能会遇到数据缺失、异常、格式混乱等各种问题。其中,缺失…

2026/8/27 20:04:18

从311件新品看机器人开发:软件生态正成为行业核心战场

2026世界机器人大会刚刚在北京闭幕。官方发布的一个数字,值得所有做机器人开发的工程师停下来想一想:首发新品311件。 如果只看新闻标题,很容易把这件事归类为“行业又热闹了一轮”。但如果你把目光从展台移到开发工具链,会发现另…

2026/8/27 20:04:18

智能体推理与CUDA护城河:从AgentX基准到环境搭建实践

智能体推理最近的热度,几乎都绕不开两个词:Agent 和 CUDA。一方面,以 Agent 为代表的智能体应用开始从“聊天对话”走向“工具调用、多步规划、自主执行”;另一方面,底层算力依然牢牢系在 NVIDIA 的 CUDA 生态上。很多…

2026/8/27 20:04:18

跨境ETF统计套利策略:从协整检验到实战回测的完整指南

1. 项目概述:从一道赛题到一套实战策略的深度拆解 看到“跨境ETF套利策略设计”这个题目,很多金融工程或量化投资领域的朋友可能会心一笑。这不仅是2023年大湾区杯数学建模竞赛的A题,更是现实中许多量化团队每天都在研究和实践的经典课题。它…

2026/8/27 20:04:18

电机控制选型实战:从BLDC驱动到MOSFET的完整指南

做电机控制这行的朋友,应该都体会过那种被“选型”支配的感觉:明明只是想快速把一个BLDC驱动方案跑起来,结果为了选一颗合适的MOSFET,在十来个原厂网站之间来回切换,最后还要再去比库存、比价格、看交期。Mouser的Moto…

2026/8/26 9:13:28

[光学原理与应用-521]:对光的错误理解与纠偏

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

2026/8/27 10:58:22

SIP通话转接原理与REFER方法实战解析

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

2026/8/27 7:46:21

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

2026/8/27 0:01:16

Go语言构建企业级AI服务网关:统一管理英伟达等AI接口调用

1. 项目概述:从零构建一个企业级的AI服务网关 最近在帮一个做内容审核的团队做技术架构升级,他们原来的业务里,每天有几十万张图片和短视频需要过审,最初是接了几个开源的AI模型自己部署,但效果和性能一直不太稳定。后…

2026/8/27 0:01:16

LeetCode Hot100(51-60)算法精解与面试技巧

1. 题目背景与核心价值"hot100(51-60)"这个标题看起来像是某个编程题库或算法练习集中的一组题目编号。在技术社区中,类似命名通常指向LeetCode、牛客网等平台的热门题目集合。作为刷过300题的算法老手,我理解这类题目的核心价值在于&#xff…

2026/8/27 0:01:16

CRC校验实战:从模2除法到HJ212协议排错

1. 为什么一个“校验码”能扛住工业现场90%的数据 corruption? 你有没有遇到过这样的场景:嵌入式设备通过RS-485上传温湿度数据,上位机偶尔收到一帧乱码——温度显示成-273℃,湿度跳到999%,但串口波形看起来完全正常&a…

2026/8/26 19:34:06

实测才敢推 AI论文网站 2026最新测评与推荐

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。一、综…

2026/8/26 19:17:08

2026必备!AI论文网站测评:最新推荐与深度对比

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

2026/8/26 19:34:05

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…