二分查找

二分查找顾名思义就是折半查找,二分算法中最难处理的就是边界问题。int l=0,r=n-1;

边界一般有两种取法:向下取整mid=(l+r)/2和向上取整mid=(l+r+1)/2;

两种边界取法核心代码板子如下:

//1,向下取整
int one(int l,int r)
{while(l<r){int mid=(l+r)/2;if(chack(mid)==true)r=mid;else l=mid+1;}return l;
}
//2.向上取整
int tow(int l,int r)
{while(l,r){int mid=(l+r+1)/2;if(check(mid)==true)l=mid;else r=mid-1;}return l;
}

当向下取整mid=(l+r)/2时check(mid)是否满足条件,如果满足条件则说明要查找的答案就在区间[l,mid]区间内,更新 r=mid ; 如果不满足条件则说明答案在区间[mid+1,r]内,更新l=mid+1。

当向上取整mid=(l+r+1)/2时check(mid)是否满足条件,如果满足条件则说明要查找的答案就在区间[mid,r]区间内,更新 l=mid;如果不满足条件则说明答案在区间[l,mid-1]内,更新 r=mid-1。

举个栗子:有序上升数组a[0]~a[7]分别为2 3 4 5 6 7 8 9

我们需要从中查找出x=5第一次出现的位置,即a[3];我们需要判断a[i]<=x;

1.当mid=(l+r)/2时

此时a[mid]=5,满足条件,我们就要更新r=mid

2.当mid=(l+r+1)/2时

此时a[mid]=6,不满足条件,我们就要更新r=mid-1。

下面放一个经典二分查找题目

输入
测试数据的第一行输入n,m表示数组的长度和询问的次数(1<=n,m<=105)
接下来一行是 n 个数字A0 . . . An-1 满足 Ai<=Ai+1 (1<=Ai<=109)
然后输入m行,每行是一个数字Qi表示询问(1<=Qi<=109)

输出
对于每个询问,如果Qi在数组中出现过,输出两个数字分别第一次出现和最后一次出现的位置,如果Qi在数组中没有出现,则输出“-1 -1”

例子
输入
10 3
3 3 3 5 5 5 6 7 7 7
5
6
10
输出
3 5
6 6
-1 -1

代码如下

#include<iostream>
#include<algorithm>
using namespace std;
const int N = 1e6 + 10;
int n, m;
int a[N];int main()
{scanf("%d%d",&n,&m);for(int i=0;i<n;i++)scanf("%d",&a[i]);while(m--){int x;scanf("%d",&x);int l=0,r=n-1;while(l<r){int mid=l+r>>1;//mid=(l+r)/2;if(a[mid]>=x)r=mid;else l=mid+1;}if(a[l]!=x)cout<<"-1 -1"<<endl;else{cout<<l<<" ";//输出左边界int l=0,r=n-1;//下面查找右边界while(l<r){int mid=l+r+1>>1;//mid=(l+r+1)/2;if(a[mid]<=x)l=mid;else r=mid-1;}cout<<l<<endl;}}
}

以上就是二分查找中的整数二分查找内容,相信大家对二分已经有了更深的理解了吧,实践是检验真理的唯一标准,刷题巩固吧!!!

哪里写的有问题的话还请各位大佬不吝赐教orn。

二分查找(整数二分)相关推荐

  1. 第十九章:二分查找和二分答案

    二分查找 二分的思想在程序设计中有着广泛的应用,例如,排序算法中的快速排序.归并排序,数据结构中的二叉树.堆.线段树等.二分是一种常用且高效的算法,它的基本用途是在单调序列中进行查找和判定操作. 二分 ...

  2. python 二分查找_二分查找算法总结

    二分查找的思想是通过每次折半快速找到一个数,例如,我们经常玩的游戏猜数字,在0~1000,随便出一个数字98让对方猜,首先猜500,对方给提示比500大还是小,如果数字小于500,就继续猜250,依次 ...

  3. 软件测试二分查找函数,二分查找

    二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法.但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列.[1] 中文名 二分查找 外文名 Binar ...

  4. Python数据结构与算法篇(五)-- 二分查找与二分答案

    1 二分法介绍 1.1 定义 二分查找又称折半查找.二分搜索.折半搜索等,是一种在静态查找表中查找特定元素的算法. 所谓静态查找表,即只能对表内的元素做查找和读取操作,不允许插入或删除元素. 使用二分 ...

  5. 二分查找和二分答案(洛谷)

    细节好可怕~ 二分查找算法的细节剖析_JackComeOn的博客-CSDN博客原文:https://www.cnblogs.com/kyoner/p/11080078.html我周围的人几乎都认为二分 ...

  6. 二分查找和二分搜索树(含插入,查找的递归非递归)

    有序顺序表顺序搜索判定树: 扩充二叉树(用于分析的判定树): 其中第i个内部节点刚好处于第i-1个外部节点和i+1个内部节点之间 #include<iostream> #include&l ...

  7. python递归实现二分查找_python二分查找算法的递归实现

    本文实例讲述了python二分查找算法的递归实现方法.分享给大家供大家参考,具体如下: 这里先提供一段二分查找的代码: def binarySearch(alist, item): first = 0 ...

  8. python递归实现二分查找_python二分查找算法的递归实现方法

    本文实例讲述了python二分查找算法的递归实现方法.分享给大家供大家参考,具体如下: 这里先提供一段二分查找的代码: def binarySearch(alist, item): first = 0 ...

  9. 查找算法:二分查找、顺序查找

    08年9月入学,12年7月毕业,结束了我在软件学院愉快丰富的大学生活.此系列是对四年专业课程学习的回顾,索引参见:http://blog.csdn.net/xiaowei_cqu/article/de ...

  10. 顺序查找与二分查找算法

    顺序查找算法 顺序查找是非常简单常用的查找算法,基本思路:从第一个元素m开始逐个与需要查找的元素x进行比较,当比较到元素值相同(即m=x)时返回元素m的下标,如果比较到最后都没有找到,则返回-1.该算 ...

最新文章

  1. 「欧拉定理」学习笔记(费马小定理)
  2. 李开复对话彭特兰:AI不是单打独斗,应避免AI冷战
  3. xhprof安装使用【转】
  4. zip unzip 命令
  5. ABAP Development Tool 代码模板和其他一些实用技巧汇总
  6. 基于visual Studio2013解决C语言竞赛题之1049抓牌排序
  7. jq写的项目如何部署到静态服务器_如何在阿里云服务器上部署一个Web项目
  8. oracle多少钱一套_消防水炮多少钱一套?您真的只需要一套吗
  9. 使用Google zxing生成二维码
  10. cognos java_cognos开发心得
  11. python怎么启动编程_启动Python编程有哪些方法?
  12. CAD绘图设计效率慢?这些外挂神器帮你1小时完成3小时的工作!
  13. C#计算MD5结果不一致
  14. liunx系统文件中转站(ftp服务)项目
  15. 天龙八部科举答题问题和答案(全1/8)
  16. 极课大数据完成C轮融资,投资方为好未来
  17. 读《因果的真相》第八、九章摘抄笔记
  18. 计算机总是提醒更新,电脑关机的时候总是提示系统正在更新怎么办?
  19. 参考文献名称怎么复制_[Zotero+Word]Zotero+Word2016参考文献中英文混排,解决et al和等的问题...
  20. 71 ----二次曲面方程:椭球面、双曲面、抛物面、二次曲面的种类

热门文章

  1. linux ip route 命令详细解释
  2. python中算术位移运算
  3. 计算机二级关系代数运算知识点,计算机二级:关系代数运算.doc
  4. 除了ARM架构,还有其他的架构吗?有没有可能开发出比ARM架构还好的? RISC-V是未来的趋势吗?
  5. BUUCTF-WarmUp
  6. centos mysql 安装教程_CentOS中安装MySQL步骤详解
  7. JavaScript的原型和继承
  8. 国产六大CPU厂商,近两年进展如何?
  9. MFC中CreateCompatibleDC的作用
  10. Uncaught ReferenceError: xxx is not defined 解决办法