C++基础算法---整数二分查找

3、整数二分查找

二分模板一共有两个,分别适用于不同情况。

算法思路:

  1. 假设目标值在闭区间[1,r]中,每次将区间长度缩小一半,当l=r时,我们就找到了目标值
  • 版本1

当我们将区间[1,r]划分成[1,mid][mid+1,r]时,其更新操作是r = mid或者1 = mid + 1, 计算mid时不需要加1。

c++ 复制代码
int bsearch_1(int l ,int r)
{
   while(l<r)
   {
        int mid = (l+r)/2;
        if(check(mid)) r = mid;
        else l = mid + 1;
	}
   return l; 
}
  • 版本2

当我们将区间[1,r]划分成[1,mid-1][mid,r]时,其更新操作是r = mid-1或者1 = mid, 计算mid时需要加1。

c++ 复制代码
int bsearch_2(int l ,int r)
{
   while(l<r)
   {
        int mid = (l+r+1)/2;
        if(check(mid)) l = mid;
        else r = mid + 1;
	}
   return l; 
}
相关推荐
小羊在奋斗几秒前
【多源BFS】01 矩阵 / 飞地的数量 / 地图中的最高点 / 地图分析 / 腐烂的苹果
算法·矩阵·宽度优先
WG_17几秒前
图论:多源最短路
数据结构·c++·算法
一只小透明啊啊啊啊5 分钟前
【leetcode 100】贪心Java版本
java·算法·leetcode
白白糖1 小时前
组合与括号生成(回溯)
python·算法·力扣
whltaoin1 小时前
动态规划算法深度解析:0-1背包问题(含完整流程)
算法·动态规划
Tanecious.1 小时前
初阶数据结构--树
数据结构
好好学习^按时吃饭1 小时前
蓝桥杯2022年第十三届省赛真题-统计子矩阵
算法·蓝桥杯
Swift社区2 小时前
LeetCode 249 解法揭秘:如何把“abc”和“bcd”分到一组?
算法·leetcode·职场和发展
CS创新实验室2 小时前
数据结构:用生活中的例子解释 AOE 网中活动的最早和最迟开始时间的含义和计算方法
数据结构·计算机考研·408计算机
大萌神Nagato2 小时前
Johnson算法 流水线问题 java实现
java·算法