news 2026/6/17 3:01:50

LeetCode 35 搜索插入位置——二分查找入门必刷题

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
LeetCode 35 搜索插入位置——二分查找入门必刷题

LeetCode 35 搜索插入位置——二分查找入门必刷题

前言

二分查找可以说是算法面试中的高频考点,也是很多复杂算法的基础。

很多同学第一次学习二分查找时,总是被各种边界条件绕晕:

  • 为什么是left <= right
  • 为什么更新边界时要mid + 1mid - 1
  • 为什么最后返回的是left
  • 为什么时间复杂度是 O(logn)?

而 LeetCode 35《搜索插入位置》正是学习二分查找最经典的入门题。


一、题目描述

给定一个升序排列的整数数组 nums 和一个目标值 target。

如果目标值存在于数组中,返回其下标;

如果不存在,则返回它应该插入的位置。

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

示例:

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

二、为什么想到二分查找?

题目有一个非常关键的信息:

数组已经升序排列

只要看到:

  • 有序数组
  • 查找元素
  • O(logn)

基本就要想到二分查找。

因为普通遍历需要:

O(n)

而二分查找每次都能排除一半区间:

O(logn)

效率提升非常明显。


三、核心思想

假设:

nums=[1,3,5,6]target=2

第一次取中间:

mid=1nums[mid]=3

发现:

2<3

说明目标一定在左半部分。

因此直接舍弃右半部分:

right=mid-1

搜索区间缩小一半。

不断重复这个过程即可。


四、标准模板

classSolution:defsearchInsert(self,nums,target):left=0right=len(nums)-1whileleft<=right:mid=(left+right)//2ifnums[mid]==target:returnmidelifnums[mid]<target:left=mid+1else:right=mid-1returnleft

五、为什么最后返回 left?

这是本题最重要的知识点。

假设:

nums=[1,3,5,6]target=2

执行过程:

left=0right=3

第一次:

mid=1nums[mid]=3

因为:

2<3

所以:

right=0

第二次:

mid=0nums[mid]=1

因为:

2>1

所以:

left=1

此时:

left=1right=0

循环结束。

最终:

left=1

正好就是数字2应该插入的位置。

因此:

returnleft

六、二分查找本质

这道题其实是在找:

第一个大于等于 target 的位置

例如:

nums=[1,3,5,6]target=4

第一个大于等于4的元素是:

5

对应下标:

2

这就是答案。

很多高级二分题本质上也都是寻找:

  • 第一个大于等于x
  • 第一个大于x
  • 最后一个小于等于x
  • 最后一个小于x

因此这道题非常值得掌握。


七、高频易错点

1. mid计算错误

错误:

mid=(left+right)/2

得到浮点数。

正确:

mid=(left+right)//2

2. 循环条件写错

左闭右闭区间:

whileleft<=right

不能写成:

whileleft<right

否则最后一个元素可能漏掉。


3. 边界更新方向写反

目标更小:

right=mid-1

目标更大:

left=mid+1

不要写反。


4. right初始化错误

正确:

right=len(nums)-1

因为最后一个元素下标是:

len(nums)-1

八、总结

本题是二分查找最经典的模板题。

核心记住三点:

  1. 有序数组 + O(logn) → 二分查找
  2. 左闭右闭区间使用left <= right
  3. 没找到时返回left

掌握本题之后,可以继续练习:

  • LeetCode 704 二分查找
  • LeetCode 34 在排序数组中查找元素的第一个和最后一个位置
  • LeetCode 69 x的平方根
  • LeetCode 278 第一个错误的版本

这些题目本质都建立在同一个二分模板之上。

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

Java核心重难点|一文吃透【封装】(大一期末必考大题满分模版)

前言 : 在大一《Java程序设计》期末考试中&#xff1a;面向对象 卷面40%以上分值而 封装&#xff08;Encapsulation&#xff09; 面向对象第一道必考大题 很多同学期末丢分不是不会写代码&#xff0c;是&#xff1a; - 不懂为什么要用 private ​- 不会标准 get/set 写法​…

作者头像 李华
网站建设 2026/6/17 2:52:12

急需聚乙烯土工膜?这几家直销厂家或许能解你的燃眉之急!

在各类工程建设中&#xff0c;聚乙烯土工膜凭借其良好的防渗、隔离等性能&#xff0c;应用广泛。当急需聚乙烯土工膜时&#xff0c;选择合适的直销厂家至关重要。聚乙烯土工膜的特性与应用聚乙烯土工膜具有优异的化学稳定性、耐老化性和抗穿刺性。行业报告显示&#xff0c;它在…

作者头像 李华
网站建设 2026/6/17 2:32:25

ProperTree:跨平台plist编辑器,macOS黑苹果配置的终极工具

ProperTree&#xff1a;跨平台plist编辑器&#xff0c;macOS黑苹果配置的终极工具 【免费下载链接】ProperTree Cross platform GUI plist editor written in python. 项目地址: https://gitcode.com/gh_mirrors/pr/ProperTree 在macOS黑苹果&#xff08;Hackintosh&…

作者头像 李华
网站建设 2026/6/17 2:31:31

李飞飞下场定调世界模型:渲染、仿真、规划

主体→行动→状态→观察→返回&#xff0c;这个循环赋予了现代术语“世界模型”以技术意义。 目录 01 溯源&#xff1a;回归交互闭环&#xff0c;厘清世界模型本源 02 三大功能范式&#xff1a;特征、现状与能力边界 渲染器&#xff1a;视觉优先&#xff0c;商业化最…

作者头像 李华