news 2026/8/29 5:52:13

【LeetCode 153 173_二分查找】寻找旋转排序数组中的最小值 缺失的数字

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【LeetCode 153 173_二分查找】寻找旋转排序数组中的最小值 缺失的数字

算法场景

当题目中存在有序性或单调性时,就应优先考虑二分查找:例如数组整体有序或局部有序(如旋转数组)、某个条件在区间内呈现“前真后假”或“前假后真”的分界特征、下标与数值存在固定关系(如缺失数字问题),或答案位于一个连续区间且可通过判断函数验证可行性;只要能够通过一次判断就排除一半区间,并且数据规模较大、要求O ( l o g n ) O(logn)O(logn)复杂度,二分查找就是最合适的解法。

  • 算法场景
    • 一、寻找旋转排序数组中的最小值
      • 1.1 题目链接
      • 1.2 题目描述
      • 1.3 题目示例
      • 1.4 算法思路
        • 核心观察
        • 判断逻辑
      • 1.5 核心代码
      • 1.6 示例测试(总代码)
    • 二、缺失的数字(剑指 Offer)
      • 2.1 题目链接
      • 2.2 题目描述
      • 2.3 题目示例
      • 2.4 算法思路
        • 核心规律
        • 二分判断
      • 2.5 核心代码
      • 2.6 示例测试(总代码)
  • 总结

一、寻找旋转排序数组中的最小值

1.1 题目链接

LeetCode153_寻找旋转排序数组中的最小值【点击进入】


1.2 题目描述

给你一个不含重复元素的整数数组nums,它原本是一个升序排列的数组,但在某个未知的点上进行了旋转。

请你找出并返回数组中的最小元素

要求时间复杂度为O(log n)


1.3 题目示例

输入:nums = [4,5,6,7,0,1,2] 输出:0
输入:nums = [3,4,5,1,2] 输出:1

1.4 算法思路

这是一个典型的二分查找变形题

核心观察
  • 旋转后的数组可以看成两段递增数组
  • 最小值一定是旋转点
  • 我们可以将nums[right]作为比较基准
判断逻辑
  • nums[mid] > nums[right]
    👉 说明最小值一定在mid 的右侧
  • 否则
    👉 最小值在mid 或 mid 的左侧

通过不断缩小区间,最终left == right时,即为最小值下标。


1.5 核心代码

classSolution{public:intfindMin(vector<int>&nums){intleft=0;intright=nums.size()-1;intx=nums[right];while(left<right){intmid=left+(right-left)/2;if(nums[mid]>x)left=mid+1;elseright=mid;}returnnums[left];}};

1.6 示例测试(总代码)

#include<bits/stdc++.h>usingnamespacestd;classSolution{public:intfindMin(vector<int>&nums){intleft=0;intright=nums.size()-1;intx=nums[right];while(left<right){intmid=left+(right-left)/2;if(nums[mid]>x)left=mid+1;elseright=mid;}returnnums[left];}};intmain(){Solution s;vector<int>nums={4,5,6,7,0,1,2};cout<<s.findMin(nums)<<endl;return0;}

二、缺失的数字(剑指 Offer)

2.1 题目链接

LeetCode173_缺失的数字【点击进入】


2.2 题目描述

一个长度为n-1的递增数组records,所有数字都在[0, n-1]范围内,且不重复

数组中恰好缺失一个数字,请找出这个缺失的数字。


2.3 题目示例

输入:records = [0,1,2,3,4,6,7] 输出:5
输入:records = [0,1,2,3] 输出:4

2.4 算法思路

这是一个非常经典的“下标和值关系” 二分查找题

核心规律
  • 在理想情况下:records[i] == i

  • 一旦出现缺失数字:

    • 缺失数字左侧:records[i] == i
    • 缺失数字右侧:records[i] > i
二分判断
  • records[mid] == mid
    👉 缺失数字在右侧
  • 否则
    👉 缺失数字在左侧(包括 mid)

最终left即为缺失的数字。


2.5 核心代码

classSolution{public:inttakeAttendance(vector<int>&records){intleft=0;intright=records.size()-1;while(left<right){intmid=left+(right-left)/2;if(records[mid]==mid)left=mid+1;elseright=mid;}returnleft==records[left]?left+1:left;}};

2.6 示例测试(总代码)

#include<bits/stdc++.h>usingnamespacestd;classSolution{public:inttakeAttendance(vector<int>&records){intleft=0;intright=records.size()-1;while(left<right){intmid=left+(right-left)/2;if(records[mid]==mid)left=mid+1;elseright=mid;}returnleft==records[left]?left+1:left;}};intmain(){Solution s;vector<int>records={0,1,2,3,4,6,7};cout<<s.takeAttendance(records)<<endl;return0;}

总结

这两道题虽然背景不同,但本质高度相似

  • 都是二分查找的变形

  • 核心在于:

    • 找到单调性
    • 明确判断条件
    • 缩小区间直到答案唯一

📌 常见二分套路总结:

  • 旋转数组:与nums[right]比较
  • 缺失数字:比较nums[mid]mid

只要抓住“哪一侧一定有答案”,二分查找就会变得非常自然。


✨ 坚持用清晰易懂的图解+代码语言, 让每个知识点都简单直观
🚀个人主页:不呆头 · CSDN
🌱代码仓库:不呆头 · Gitee
📌专栏系列

  • 📖 《C语言》
  • 🧩 《数据结构》
  • 💡 《C++》
  • 🐧 《Linux》

💬座右铭“不患无位,患所以立。”

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/29 3:32:20

跨平台兼容性测试:anything-llm在Windows/Linux/macOS表现对比

跨平台兼容性测试&#xff1a;anything-llm在Windows/Linux/macOS表现对比 在生成式AI迅速渗透办公与知识管理的今天&#xff0c;越来越多用户不再满足于通用聊天机器人。他们更关心一个问题&#xff1a;如何让大模型真正理解我自己的文档&#xff1f; 尤其是企业法务、科研人员…

作者头像 李华
网站建设 2026/8/24 14:01:44

黑客松赞助方案:提供免费GPU算力支持参赛团队

黑客松赞助方案&#xff1a;提供免费GPU算力支持参赛团队 在AI创新竞赛的战场上&#xff0c;时间就是生命。一个绝妙的创意&#xff0c;往往因为环境配置耗时过长、本地算力不足或数据隐私顾虑而胎死腹中。尤其是在大语言模型&#xff08;LLM&#xff09;日益成为应用核心的今天…

作者头像 李华
网站建设 2026/8/29 4:20:35

工业物联网告警分析:设备日志异常模式快速定位

工业物联网告警分析&#xff1a;设备日志异常模式快速定位 在某大型汽车零部件制造厂的总控室里&#xff0c;凌晨三点突然响起急促的报警声——一条关键装配线无预警停机。值班工程师打开监控系统&#xff0c;屏幕上滚动着数千条日志信息&#xff1a;“Modbus timeout”、“CAN…

作者头像 李华
网站建设 2026/8/28 22:40:30

Windows系统文件mlang.dll丢失 下载修复方法

在使用电脑系统时经常会出现丢失找不到某些文件的情况&#xff0c;由于很多常用软件都是采用 Microsoft Visual Studio 编写的&#xff0c;所以这类软件的运行需要依赖微软Visual C运行库&#xff0c;比如像 QQ、迅雷、Adobe 软件等等&#xff0c;如果没有安装VC运行库或者安装…

作者头像 李华
网站建设 2026/8/28 3:30:45

微博热搜话题策划:#原来AI可以这样读PDF# 引发公众讨论

微博热搜话题策划&#xff1a;#原来AI可以这样读PDF# 引发公众讨论 在微博上&#xff0c;一个看似简单的话题 #原来AI可以这样读PDF# 突然冲上热搜&#xff0c;引发大量网友围观和实测。有人上传了几十页的财报&#xff0c;问“这家公司去年研发投入多少”&#xff1b;有人把毕…

作者头像 李华
网站建设 2026/8/28 22:42:09

LangFlow软件著作权登记材料生成工具

LangFlow&#xff1a;可视化构建AI工作流与软件著作权材料生成利器 在当今AI应用爆发式增长的背景下&#xff0c;开发者面临的不仅是技术选型的复杂性&#xff0c;更是开发效率、团队协作和知识产权保护之间的多重挑战。尤其是当使用如LangChain这类功能强大但结构复杂的框架时…

作者头像 李华