1.整数二分算法原理

  • ps:数组具有单调性,则一定可以使用整数二分算法;但是,能够使用整数二分算法的数组,数组未必具有单调性
  • 整数二分算法的本质:给定一个区间,在区间中定义了某种性质。该性质在区间的右半区间是满足的,但在左半区间是不满足的。二分法目的就是为了寻找满足某种性质的分界点
  • 算法主要步骤
    • a.确定区间的中间点mid
    • b.根据实际问题编写check()函数,判断mid是否满足区间[l, r]的某种性质
    • c.更新区间端点
  • 模板1图解:
  • 模板2图解:

2.代码模板1


// 根据实际题目场景编写check()函数,检查x是否满足某种性质
bool check(int x)
{}// 区间[l, r]被划分成[l, mid - 1]和[mid, r]时使用
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;
}

3.代码模板2


// 根据实际题目场景编写check()函数,检查x是否满足某种性质
bool check(int x)
{}// 区间[l, r]被划分成[l, mid]和[mid + 1, r]时使用
int bsearch_1(int l, int r)
{while(l < r){int mid = l + r >> 1;if(check(mid)) r = mid;  // check()判断mid是否满足性质else l = mid + 1;}return l;
}

整数二分查找原理及代码模板相关推荐

  1. 二分查找原理非递归与递归实现【转载】

    二分查找 实现查找指定数值在元素有序的数组中存储的位置(索引),返回该位置(索引). 解题步骤: 定义3个用来记录索引值的变量,变量min记录当前范围最小索引值,初始值为0:变量max记录当前范围最大 ...

  2. 二分查找(整数二分)

    二分查找 二分查找顾名思义就是折半查找,二分算法中最难处理的就是边界问题.int l=0,r=n-1; 边界一般有两种取法:向下取整mid=(l+r)/2和向上取整mid=(l+r+1)/2; 两种边 ...

  3. 查找算法——二分查找(原理+源码)

    1,原理 二分查找又称折半查找,只适用于有序数组.二分查找原理很简单,针对有序数组的查找效率也很高.具体原理为,每次拿目标数值(以下用value表示)与数组中间位置的数据(以下用arry[mid]表示 ...

  4. Python 从零实现二分查找,大量动画演示

    二分查找(Binary Search),是一种效率较高的查找方法.在面试或算法竞赛中,查找相关的问题最优解通常就是二分查找.特别在现场面试中尤其重要,常用二分查找来考察面试者的编码能力和算法思维. 二 ...

  5. 插入,冒泡,选择,快速排序,二分查找

    一. 直接插入排序 void insertSort(int[] a){       for(int i=1;i<a.length; i++){            if (a[i]<a[ ...

  6. [二分查找] 一:子区间界限应当如何确定

    普通的二分查找 先引入一个最简单的二分查找吧 int binarySearch(int* nums, int numsSize, int target){int left = 0, right = n ...

  7. JavaSE(二十四)——冒泡排序、选择排序、直接插入排序以及二分查找

    文章目录 1. 冒泡排序 2. 选择排序 3. 直接插入排序 4. 二分查找 1. 冒泡排序 原理:数组元素两两比较,大的往后放,经过一轮比较后,最大元素在最后面,如此往复. 举例说明: 代码: // ...

  8. PHP 实现二分查找

    PHP 实现二分查找 原理: 首先,假设数组中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功:否则利用中间位置记录将数组分成前.后两个子数组,如果中间位置记录的关 ...

  9. 数据结构---顺序查找和二分查找

    数据结构-顺序查找和二分查找 原理:参考趣学数据结构 代码: #include<stdio.h> #include<stdlib.h> int n;//查找元素数组的长度 vo ...

最新文章

  1. 技术深扒丨没点想象力都看不透这个网站的反爬措施!
  2. 胡兴梅博士谈沟通技巧
  3. 关闭计算机网络端口,怎么关闭135和500端口?
  4. @Controller和@RestController的区别
  5. 空间点过程(Point Processes)和随机测度(Random Measure)
  6. Notepad++ 6.0 发布,优化了大文件加载性能
  7. js实际工作中的技能点
  8. java中的关键字有哪些_java关键字复习
  9. SQL中 left join 左表合并去重实用技巧
  10. 通过fork进程爆破canary
  11. strcore.cpp(156) 内存泄漏
  12. oracle如何取当前日期年月_Oracle获取当前年、月、日的方法
  13. 毕业生简单的用Python实现一个信息管理系统【含示例代码】
  14. sql服务器显示error,SQL server 2008 登陆服务器时提示错误233
  15. 18.TCP/IP 详解卷1 --- TCP 连接的建立与终止
  16. linux和宿主机windows之间建立共享文件夹
  17. windows系统镜像文件汇总
  18. Numpy的21个常用知识点
  19. 信息奥赛课课通(C++)p139-例3幸运数的划分
  20. 已登陆windows忘记密码的修改密码方法重置密码

热门文章

  1. 风变编程python网址_风变编程Python:如何打造职场差异化竞争优势
  2. Centos 7.5 安装Zabbix4.0
  3. 《阿里巴巴编码规范(JAVA)》学习认证考后感
  4. Netty序章之BIO NIO AIO演变
  5. Unity制作的 安卓和Ios程序如何退出
  6. 基于easyui开发Web版Activiti流程定制器详解(五)——Draw2d详解(一)
  7. 关于大型网站技术演进的思考(二十)--网站静态化处理—web前端优化—中(12)...
  8. [Asp.net MVC]Asp.net MVC5系列——添加数据
  9. 程序员Web面试之前端框架等知识
  10. xp下 opensuse12.3 制作可启动U盘 (用U盘安装opensesu12.3)