二分查找各种情况大总结

本博客转载自:https://blog.csdn.net/yefengzhichen/article/details/52372407#comments
原博客代码是java版本的,我给改成了C++版本的。
二分查找多次刷题时遇到,虽然每次也能写对,但花了蛮多时间,没好好想过。而且网上的太多版本,并不是很简洁,而且边界条件变化情况太多,容易混淆,下面是自己对二分查找的一些思考和总结,尽量写得简单易懂。

1. 三种基本版本

1.1 二分查找原始版—查找某个数的下标(任意一个)

在有序数组中查找某个数,找到返回数的下标,存在多个返回任意一个即可,没有返回-1。所有程序采用左右均为闭区间,即函数中n为最后一个元素下标,而不是元素个数。典型代码如下:

int binarySearch(vector<int> a, int n + 1, int key){  //n + 1 个数  int low = 0;  int high = n;  int mid = 0;  while(low <= high) {  mid = low + ((high-low) >> 1);  if(key == a[mid]) {  return mid;  } else if(key < a[mid]) {  high = mid - 1;  } else {  low = mid + 1;  }  }  return -1;  }  

【TO DO!】二分查找各种情况大总结相关推荐

  1. POJ_3685_Matrix_(二分,查找第k大的值)

    描述 http://poj.org/problem?id=3685 一个n*n的矩阵,(i,j)的值为i*i+100000*i+j*j-100000*j+i*j,求第m小的值. Matrix Time ...

  2. LeetCode4寻找两个有序数组的中位数(二分查找+分治)

    目录 1.题目 2.分析 3.代码 二分查找:绝大多数二分查找问题利用的是单调性,也有一些例外)或者题目本身蕴含的可以逐渐缩小问题规模的特性解决问题.时间复杂度log级. 分治法的设计思想是:将一个难 ...

  3. linux dd 大文件下载,Linux dd+grep 大文件二分查找

    Linux dd 命令用于读取.转换并输出数据. dd 可从标准输入或文件中读取数据,根据指定的格式来转换数据,再输出到文件.设备或标准输出. 参数说明(dd --help)Usage: dd [OP ...

  4. 算法图解学习笔记01:二分查找大O表示法

    二分查找 二分查找又称折半查找,其输入的必须是有序的元素列表.二分查找的基本思想是将n个元素分成大致相等的两部分,取a[n/2]与x做比较,如果x=a[n/2],则找到x,算法中止:如果x<a[ ...

  5. 59.排序好的大数据创建索引文件,并实现大文件的二分查找,根据索引百万数据秒读数据...

    创建索引 1 //创建索引 2 struct index 3 { 4 //保存每行偏移的位置 5 int *pindex; 6 //文件的总长度 7 int length; 8 }allindex;/ ...

  6. LeetCode 744. 寻找比目标字母大的最小字母(二分查找)

    1. 题目 给定一个只包含小写字母的有序数组letters 和一个目标字母 target,寻找有序数组里面比目标字母大的最小字母. 数组里字母的顺序是循环的.举个例子,如果目标字母target = ' ...

  7. 用递归方法实现二分查找,为了避免异常情况,首先判断上下限范围

    用递归方法实现二分查找,为了避免异常情况,首先判断上下限范围 int binarysearch(int source[],int low,int,high,int targetvalue) {if ( ...

  8. 【C/C++】二分查找算法模板总结(适用于大多数情况)

    二分查找算法模板 [二分条件] 条件: 单调.有序 时间复杂度: O(logn) [伪代码模板] l = -1, r = n //注意l和r一开始要在区间外 也就是二分区间为[0, n-1] whil ...

  9. 常用十大算法 非递归二分查找、分治法、动态规划、贪心算法、回溯算法(骑士周游为例)、KMP、最小生成树算法:Prim、Kruskal、最短路径算法:Dijkstra、Floyd。

    十大算法 学完数据结构该学什么?当然是来巩固算法,下面介绍了十中比较常用的算法,希望能帮到大家. 包括:非递归二分查找.分治法.动态规划.贪心算法.回溯算法(骑士周游为例).KMP.最小生成树算法:P ...

最新文章

  1. kail安装和vmtools安装
  2. PyQt5 技术篇-plainTextEdit控件获得文本内容方法、设置文本内容方法。
  3. 电容屏:为什么带手套无法进行操作手机?
  4. 2022年全球及中国工业用真空电缆行业十四五产能需求与投资战略研究报告
  5. 洛谷P3919可持久化线段树
  6. 教你玩转CSS border(边框)
  7. java学习(140):1.7后新特性
  8. python 类特殊方法_Python 定制类的特殊方法与授权
  9. abstract、virtual、override 和 new
  10. 保密检查便携式计算机,Lyaept关于便携式计算机和移动存储介质保密管理制度.doc...
  11. ExtJS4系列目录
  12. java 制作签名版电子合同
  13. linux ftps ftp,Linux下ftp+SSL实现ftps
  14. win11 打开 IE7 兼容模式
  15. 《嵌入式系统设计师教程》读后感:2.6嵌入式系统电源
  16. presson绘图练习
  17. 【我的架构之路】什么是代理服务器以及什么是负载均衡?
  18. Linux的文件特殊权限
  19. word论文格式管理和孤行控制
  20. python的roc曲线与阈值_python 使用sklearn绘制roc曲线选取合适的分类阈值

热门文章

  1. python---之阿partial
  2. ubuntu19.04支持android,Ubuntu 19.04 最终发布日期和计划功能公布
  3. linux awk 时间范围,如何用awk从日志文件中找到时间范围的记录
  4. java 子类调用父类内部类_java 如何在子类方法中实例化父类的内部类?
  5. oracle语法和sql的区别吗,ORACLE和SQL语法区别归纳
  6. mysql job status_检查SQL Server Job状态
  7. Java InputStream转换为String
  8. Android Material文本字段
  9. 进程调度(一)--linux内核设计与实现读书笔记
  10. 数据结构:二叉搜索树(BST)全部基本操作