• 今天开始来复习算法基础课的内容了 今天是二分 二分有好几种类型 ,

  • 先上板子(数列默认升序,如果没有升序可以用sort排一下);

    如果快要比赛的话,就记住判断时,大于等于找小等 ,小于等于早大等;

仅仅针对本文章的板子

1 求升序序列的数组中小于等于某个数(target)的最小值

​
int str[100]; //假设已经排好序的给定数组;
int l = 0 , r =  n - 1;
while(l < r)
{int mid = l +r >> 1;  //这里是移位运算;二进制向右移动一位,相当于除以二;if(str[mid] >= target(要查找的那个数) )r = mid;else l =  mid+1; 这里的 l = mid + 1 是为了区间的不重不漏原则;
}cout << str[l]<<endl;
return 0 ;

再上第二个板子
找出升序序列的大于等于某个数的最大值;

int  str[100];
int l = 0 , r = n - 1;
while(l < r)
{int mid = (l + r +1) >> 1;//这里加上1是防止陷入死循环;if(str[mid] <= targe) l = mid;else r = mid - 1;
}cout << str[l] << endl;

注意 在例子中我并没有判断是否这个条件不成立的情况,如果要加上可以在最后的 cout 前加上一个判断语句即可 ,接下里我们来探讨。

本质核心内容以及核心思想其实只有几行代码,而这几行代码中对区间的判定可以决定搜索的条件,如
:找到给定数列中大于等于某个数的最小值,这时候(默认升序)你在二分的过程中需要对更新左边界与右边界的条件进行一个思考 , 反过来,如果我们要找到该序列中小于等于某个数的值,这时候同样要进行对边界条件的系修改 , 如下面这道题

这是在acwing上一道经典的题目;在这个题目中我们可以看到,这个其实就是对两个板子的应用;
下面就是ac代码

#include<iostream>
#include<cstdio>using namespace std ;
const int N = 100010;int a[N];int main()
{int n , q;cin >> n >>q;for(int i = 0 ; i < n ; i++)cin >> a[i];while(q--){int l = 0 , r = n-1;int o ;cin >>o ;while(l <r){int mid = l +r >>1;if( a[mid] >= o)r = mid;else l = mid+1;}int kk = l ;l = 0 , r=  n-1;while( l < r){int mid = (l+r+1)/2;if(a[mid] <= o)l = mid;else r = mid-1;}if(a[kk] == o && a[r] ==o){cout << kk <<' '<< r <<endl;}else cout << "-1 -1"<<endl;}return 0 ;}

整来说 ,对初学者来说判断边界有时候会早不到头脑,便一直出错;其实其原理大家并不需要理解的太过于深刻,因为解决实际问题的时候我们需要的是写出来这个算法来解决问题,并不是要去写这个算法的证明,

另外 ,要注意一下二分的开始的 l 与r 的范围, 尽量接近已知符合要去的范围,范围越小运行的越快。
学习算法的小伙伴们咱们一起加油吧!

二分的模板(新手上路)相关推荐

  1. 【新手上路】语法入门算法入门题单

    作者:王清楚 链接:[新手上路]语法入门&算法入门题单_ACM竞赛_ACM/CSP/ICPC/CCPC/比赛经验/题解/资讯_牛客竞赛OJ_牛客网 来源:牛客网 介绍:本题单分为语法入门和算法 ...

  2. HanLP《自然语言处理入门》笔记--1.新手上路

    文章目录 1. 新手上路 1.1 自然语言与编程语言的比较 1.2 自然语言处理的层次 1.3 自然语言处理的流派 1.4 机器学习 1.5 语料库 1.6 开源工具 1.7 总结 1.8 GitHu ...

  3. 自然语言处理之新手上路

    1. 新手上路 自然语言处理(Natural Language Processing,NLP)是一门融合了计算机科学.人工智能及语言学的交叉学科,它们的关系如下图所示.这门学科研究的是如何通过机器学习 ...

  4. ALM新手上路(四)

    新手上路一 1.1.快速入门 首先我们按照章节3安装说明中成功安装了我们的ALM之后,我们就可以根据我们的快速入门进行一个操作使用了. 1.1.1 ALM-H技术简介 ALM-H可以使 IT 人员能够 ...

  5. VS2010 C# ReportViewer控件新手上路心得

    环境:Visual Studio 2010, C#; 前言:本来是用VS2010连接Oracle数据库做一个报表功能,数据集设置部分出了些问题还未解决,因此先用本地动态数据为测试用例先熟悉VS自带的R ...

  6. day3 ECS云服务器新手上路

    day3 ECS云服务器新手上路 创建资源 请点击页面左侧的 云产品资源,在下拉栏中,查看本次实验资源信息: 在资源下拉栏点击 免费开通 按钮,开始创建实验资源. ECS远程登录实践 登录 方法参见: ...

  7. Windows内核新手上路1——挂钩SSDT

    Windows内核新手上路1--挂钩SSDT 这个系列记录学习我学习windows内核的点点滴滴,高手请直接无视. 文章核心内容:挂钩SSDT中函数列NtOpenProcess,NtDuplicate ...

  8. Windows内核新手上路3——挂钩KeUserModeCallBack

    Windows内核新手上路3--挂钩KeUserModeCallBack 1.     简介 在Windows系统中,提供了几种方式从R0调用位于R3的函数,其中一种方式是KeUserModeCall ...

  9. Windows内核新手上路2——挂钩shadow SSDT

    Windows内核新手上路2--挂钩shadow SSDT 文章核心内容:安全软件窗口保护.安全输入.截屏保护的一些思路.挂钩NtUserFindWindowEx.NtUserGetForegroun ...

  10. Linux新手上路命令

    Linux新手上路命令 命令:www.ahlinux.com Ctrl+Alt+F1  进入命令界面 Ctrl+Alt+F7  返回图形界面 root用户和普通用户切换 administrator 2 ...

最新文章

  1. hdu1521 排列组合
  2. 高通平台耳机插拔检测
  3. java通过反射获取类名、属性名称以及@Table注解上的表名称
  4. Build 2016,你可能忽视的几个细节
  5. JavaScript 读写 span标签的值 - 代码篇
  6. Python学习笔记:序列之字符串
  7. 苹果耳罩式耳机曝光 将于今年下半年发布
  8. Spark2.0.2+Zeppelin0.6.2 环境搭建 初探
  9. mysql账户最小授权_mysql 创建帐号并授权
  10. AVR单片机项目教程 基于C语言,AVR单片机项目教程:基于C语言(第2版)
  11. 博弈论(巴什博弈,威佐夫博弈,尼姆博弈)
  12. MOSFET原理与应用
  13. InputStream读JSON数据时乱码
  14. 转载:stm32的引脚有两种用途
  15. vue动画transition
  16. 阿木有专门讲MAVROS功能包节点的课,有讲MAVROS怎么订阅消息,发布消息。看来MAVROS这边的编程不用太担心。
  17. 英文期刊投稿指南模板(通用版)-----以IEEE Wireless Communications为例
  18. 强大的矩阵奇异值分解(SVD)及其应用(转)-我们老师推荐的
  19. godspeed机器人_来自深渊第二季剧情
  20. 如何提高自己的想象力和思考力?

热门文章

  1. JAVA利用URL从网上下载音乐资源
  2. LoadRunner 带宽模拟
  3. Mapreduce源码分析(一):FileInputFormat切片机制,源码详解
  4. CSMA、CSMA/CD与CSMA/CA协议
  5. ios苹果免越狱群控电脑鼠标操作手机同步器
  6. Java基础实战(一):万年历
  7. C++下ctrl+z退出cin输入循环
  8. 基于Spark的机器学习实践 (七) - 回归算法
  9. 翻译 | 《JavaScript Everywhere》第25章 移动应用程序发布
  10. Clickhouse 空缺值处理