news 2026/10/14 2:17:03

LeetCode 35:搜索插入位置(二分查找经典入门题)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
LeetCode 35:搜索插入位置(二分查找经典入门题)

一、题目描述

给定一个升序、无重复元素的排序数组和一个目标值target。需求:

  1. 如果数组中存在target,返回对应索引;
  2. 如果不存在,返回target按升序插入的位置;
  3. 强制要求时间复杂度O(log n)。

示例:

  • nums = [1,3,5,6], target = 5→ 输出2(找到元素)
  • nums = [1,3,5,6], target = 2→ 输出1(插入到 3 前面)
  • nums = [1,3,5,6], target = 7→ 输出4(插入到末尾)

题目核心限制:必须二分,不能遍历。遍历是O(n),会不满足题目要求。

二、解题思路:为什么是二分查找?

二分查找的适用条件:

  • 数组有序(本题升序)
  • 时间复杂度要求O(log n)

这道题不只是简单的“找数”,而是找数 / 找插入位置一体的二分模板题,是二分最经典的入门题型。

核心结论(背诵级重点)在left <= right的二分模板中:

  • 成功找到target:直接返回mid
  • 循环结束、未找到target:left就是最终插入位置

原理:循环结束时一定满足left > right,此时left指向第一个大于target的元素下标,恰好是target应该插入的位置。

三、完整 C++ AC 代码(LeetCode 可直接提交)

#include<vector>usingnamespacestd;classSolution{public:intsearchInsert(vector<int>&nums,inttarget){intleft=0;intright=nums.size()-1;while(left<=right){// 规避整数溢出,优于 (left + right) / 2intmid=left+(right-left)/2;if(nums[mid]==target){// 找到目标值,直接返回下标returnmid;}elseif(nums[mid]<target){// 目标在右区间,左边界右移left=mid+1;}else{// 目标在左区间,右边界左移right=mid-1;}}// 未找到,left 为插入位置returnleft;}};

四、逐流程图解推演

以nums = [1,3,5,6], target = 2为例:

  1. 初始:left = 0, right = 3
  2. mid = 1,nums[1] = 3 > 2→right = 0
  3. mid = 0,nums[0] = 1 < 2→left = 1
  4. 此时left(1) > right(0),循环结束
  5. 返回left = 1,正确插入位置

以target = 7为例:全部元素都比 7 小,循环结束后left最终走到数组末尾下标 4,完美对应末尾插入的情况。

五、高频易错点(新手必看)

  1. mid 写法溢出问题:错误写法mid = (left + right) / 2,数据量大时会 int 溢出。正确写法mid = left + (right - left) / 2,等价且安全。
  2. 循环条件写错:必须是left <= right,如果写成left < right,会漏掉边界元素,插入位置计算错误。
  3. 循环结束返回 right:很多新手这里翻车!一定返回left,不是right。循环结束left指向插入位,right指向插入位的前一位。
  4. 提交多余代码报错:LeetCode 只需要Solution类 + 函数,不需要main、cout、iostream,带上会编译报错。

六、复杂度分析

  • 时间复杂度:O(log n),每次循环将区间缩小一半,严格满足题目要求
  • 空间复杂度:O(1),仅使用常数变量,无额外空间开销

七、模板总结(通用二分查找插入模板)

适用于:有序无重复数组、查找元素 / 查找插入位置场景,可直接套用到同类题目:

while(left<=right){intmid=left+(right-left)/2;if(nums[mid]==target)returnmid;elseif(nums[mid]<target)left=mid+1;elseright=mid-1;}returnleft;

八、刷题感悟

这道题是二分查找的地基题,看似简单,却包含了二分最核心的边界逻辑。很多人学不会二分,就是因为搞不懂「循环结束后left、right的含义」。吃透这道题的边界逻辑,后续所有二分查找、二分答案题目都能轻松上手。

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

商业秘密保护的重磅判例:1.66亿赔偿背后的四个关键启示 ——从最高法(2022)知民终1592号案看企业商业秘密维权之道

2024年年底&#xff0c;最高人民法院就沈某集团、透某公司诉斯某公司等侵害技术秘密及计算机软件著作权案作出终审判决&#xff0c;判赔金额高达1.66亿余元&#xff0c;引发业界广泛关注。作为一桩横跨十余年、涉及技术秘密与软件著作权双重侵权的复杂案件&#xff0c;该判决在…

作者头像 李华
网站建设 2026/10/14 2:15:19

域渗透神器 Certipy:AD‑CS 证书漏洞挖掘与利用

&#x1f512;免责声明&#xff1a;本文全部技术内容仅限授权渗透测试、红蓝对抗、安全学习研究使用。未经目标域环境书面授权&#xff0c;禁止在企业 AD 域执行证书枚举、证书申请、提权、伪造证书等攻击操作&#xff0c;未授权访问计算机系统属于违法行为。全部演示基于自建隔…

作者头像 李华
网站建设 2026/10/14 2:14:29

手推贝叶斯、LDA与PCA:经典模式识别讲义的代码复现指南

简介&#xff1a;本资源是一份面向人工智能与机器学习初学者及进阶学习者的《模式识别》核心理论教学课件&#xff0c;聚焦隐马尔可夫模型&#xff08;HMM&#xff09;这一关键方法论&#xff0c;系统讲解其数学原理、建模逻辑与典型应用场景。内容涵盖马尔可夫性、齐次马尔科夫…

作者头像 李华
网站建设 2026/10/14 2:14:12

无算法背景C语言刷题:从零拆题到AC的实战记录与避坑指南

刷题这事&#xff0c;最难的不是题目本身&#xff0c;而是“觉得自己不配”。我一开始就是这么想的。没学过算法课&#xff0c;数据结构全靠自学&#xff0c;C语言也只算半个熟手&#xff0c;看到力扣上那些讨论区的神仙解法&#xff0c;第一反应是“这题我也配做&#xff1f;”…

作者头像 李华
网站建设 2026/10/14 2:13:34

Android Studio简易App实例:从环境配置到运行调试完整指南

简介&#xff1a;面向Android初学者的开发入门实例文档&#xff0c;完整演示使用Android Studio从创建空白项目到搭建主页面、关于页面、设置页面的过程。文档逐步讲解新建项目的参数配置、Activity生命周期与onCreate重写、setContentView布局加载方式&#xff0c;以及Prefere…

作者头像 李华