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; 
}
相关推荐
智驱力人工智能4 分钟前
货车违规变道检测 高速公路安全治理的工程实践 货车变道检测 高速公路货车违规变道抓拍系统 城市快速路货车压实线识别方案
人工智能·opencv·算法·安全·yolo·目标检测·边缘计算
罗湖老棍子7 分钟前
【例9.18】合并石子(信息学奥赛一本通- P1274)从暴搜到区间 DP:石子合并的四种写法
算法·动态规划·区间dp·区间动态规划
dgaf10 分钟前
【疯狂的往左】用 C 语言播放《下山》
c语言·c++
卷卷的小趴菜学编程12 分钟前
项目篇----仿tcmalloc的内存池设计(central cache篇)
c++·tcmalloc·内存池·central cache
2301_8107301016 分钟前
python第四次作业
数据结构·python·算法
adam_life19 分钟前
区间动态# P1880 [NOI1995] 石子合并】
算法
txinyu的博客20 分钟前
解析muduo源码之 Channel.h & Channel.cc
c++
坠金24 分钟前
递归、递归和回溯的区别
算法
春栀怡铃声28 分钟前
认识二叉树~
c语言·数据结构·经验分享·c·编译
恋爱绝缘体128 分钟前
Java语言提供了八种基本类型。六种数字类型【函数基数噶】
java·python·算法