
🔥小龙报:个人主页
🎬作者简介:C++研发,嵌入式,机器人,AI等方向学习者
❄️个人专栏:《优选算法》
✨ 永远相信美好的事情即将发生

文章目录
- 前言
- 一、搜索插入位置
-
- 1.1题目
- [1.2 算法原理](#1.2 算法原理)
-
- [1.2.1 算法思路](#1.2.1 算法思路)
- [1.3 代码](#1.3 代码)
- 二、x的平方根
-
- [2.1 题目](#2.1 题目)
- [2.2 算法原理](#2.2 算法原理)
-
- [2.2.1 算法思路](#2.2.1 算法思路)
- [2.2.2 算法流程](#2.2.2 算法流程)
- [2.2.2.1 思路一:暴力枚举](#2.2.2.1 思路一:暴力枚举)
-
- [2.2.2.2 思路二: 二分查找](#2.2.2.2 思路二: 二分查找)
- [2.3 代码](#2.3 代码)
- 总结与每日励志
前言
二分查找是算法笔试面试中的高频基础考点,依托数组二段性可将时间复杂度优化至O(logN),高效解决有序数组检索问题。本文选取搜索插入位置、x的平方根两道经典入门例题,拆解二分算法核心逻辑与边界处理技巧,梳理不同场景下的解题思路,帮助大家夯实二分思维,掌握模板化解题方法,为后续复杂算法学习筑牢基础。
一、搜索插入位置
1.1题目
链接:搜索插入位置

1.2 算法原理
核心思想: 二分
1.2.1 算法思路
a. 分析插入位置左右两侧区间上元素的特点:
设插入位置的坐标为 index,根据插入位置的特点可以知道:
[left, index - 1]内的所有元素均是小于target的;[index, right]内的所有元素均是大于等于target的。
b. 设 left 为本轮查询的左边界,right 为本轮查询的右边界。根据 mid 位置元素的信息,分析下一轮查询的区间:
- 当
nums[mid] >= target时,说明mid落在了[index, right]区间上,mid左边包括mid本身,可能是最终结果,所以我们接下来查找的区间在[left, mid]上。因此,更新right到mid位置,继续查找。 - 当
nums[mid] < target时,说明mid落在了[left, index - 1]区间上,mid右边但不包括mid本身,可能是最终结果,所以我们接下来查找的区间在[mid + 1, right]上。因此,更新left到mid + 1的位置,继续查找。
c. 直到我们的查找区间的长度变为 1,也就是 left == right 的时候,left 或者 right 所在的位置就是我们要找的结果。
1.3 代码
csharp
class Solution
{
public:
int searchInsert(vector<int>& nums, int target)
{
int l = 0,r = nums.size() - 1;
while(l < r)
{
int mid = (l + r) / 2;
if(nums[mid] >= target)
r = mid;
else
l = mid + 1;
}
if(nums[l] < target)
return l + 1;
else
return l;
}
};
时间复杂度 : O(n)
二、x的平方根
2.1 题目
链接:x的平方根

2.2 算法原理
核心思想 :二段性 ->二分算法
2.2.1 算法思路
2.2.2 算法流程
2.2.2.1 思路一:暴力枚举
依次枚举 [0, x] 之间的所有数 i:
(这里没有必要研究是否枚举到 x / 2 还是 x / 2 + 1。因为我们找到结果之后直接就返回了,往后的情况就不会再判断。反而研究枚举区间,既耽误时间,又可能出错)
- 如果
i * i == x,直接返回x; - 如果
i * i > x,说明之前的一个数是结果,返回i - 1。
由于 i * i 可能超过 int 的最大值,因此使用 long long 类型。
设 x 的平方根的最终结果为 index:
2.2.2.2 思路二: 二分查找
a. 分析 index 左右两次数据的特点:
[0, index]之间的元素,平方之后都是小于等于x的;[index + 1, x]之间的元素,平方之后都是大于x的。
2.3 代码
cpp
class Solution
{
public:
int mySqrt(int x)
{
if(x < 1)
return 0;
long long l = 1,r = x;
while(l < r)
{
long long mid = (l + r + 1) / 2;
if(mid * mid <= x)
l = mid;
else
r = mid - 1;
}
return l;
}
};
时间复杂度 : O(logN)
总结与每日励志
✨ 本文通过两道典型例题,系统讲解了二分查找的核心原理,区分了左右边界查找逻辑,规避了数值溢出、区间死循环等常见bug,梳理出通用解题模板。二分算法的核心在于精准判断区间二段性、灵活调整边界。算法学习没有捷径,唯有坚持刷题、复盘总结,不断打磨思维与细节,突破解题瓶颈,日积月累终会实现能力跃迁,遇见更优秀的自己。
