博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
二分——二分查找算法模板
阅读量:4572 次
发布时间:2019-06-08

本文共 766 字,大约阅读时间需要 2 分钟。

转自:

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

算法思路:假设目标值在闭区间[l, r]中, 每次将区间长度缩小一半,当l = r时,我们就找到了目标值。

版本1

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

C++ 代码模板:

int bsearch_1(int l, int r){    while (l < r)    {        int mid = l + r >> 1;        if (check(mid)) r = mid;        else l = mid + 1;    }    return l;}

版本2
当我们将区间[l, r]划分成[l, mid - 1][mid, r]时,其更新操作是r = mid - 1或者l = mid;,此时为了防止死循环,计算mid时需要加1。

int bsearch_2(int l, int r){    while (l < r)    {        int mid = l + r + 1 >> 1;        if (check(mid)) l = mid;        else r = mid - 1;    }    return l;}

 

区分:

  版本一将区间[l, r]划分成[l, mid]和[mid + 1, r],版本二将区间[l, r]划分成[l, mid - 1]和[mid, r]。

  两者的区别就在于mid的归属,如果mid属于左边,则选择版本一,如果mid属于右边,则选择版本二。

 

转载于:https://www.cnblogs.com/ninedream/p/11197134.html

你可能感兴趣的文章
配置算法(第4版)的Java编译环境
查看>>
PostgreSQL 9.6.0 手册
查看>>
编写带有点击特效的UIButton
查看>>
使用mac版思维导图软件MindNode
查看>>
理解面向对象编程(OOP Object Oriented Programming)
查看>>
[題解]luogu_P1144最短路計數
查看>>
每日一个linux命令5 -- rm
查看>>
外存===内存
查看>>
node.js中的fs.appendFile方法使用说明
查看>>
URAL 1297 求最长回文字符串
查看>>
HDU 1098 Ignatius's puzzle 费马小定理+扩展欧几里德算法
查看>>
【C/C++】指针
查看>>
Anconda3导入TensorFlow报错,错误:h5py\__init__.py:36: FutureWarning
查看>>
js中return;、return true、return false;区别
查看>>
容器技术|Docker三剑客之docker-machine
查看>>
SQL注入理解与防御
查看>>
yum本地源配置
查看>>
3.4 C与汇编程序的相互调用
查看>>
浅析 JavaScript 链式调用
查看>>
分布式版本控制系统Git的安装与使用
查看>>