当前位置: 首页 > wzjs >正文

两学一做专题教育网站明星百度指数排名

两学一做专题教育网站,明星百度指数排名,商城网站建设流程,汕头公司做网站前言 在算法竞赛中,二分查找使用的频率是非常高的,对于C选手而言,有STL中自带的lower_bound和upper_bound二分查找,可以很方便的进行二分查找。但是非C选手、或者需要自定义多条件查找的情况需要自己写一个二分,本文对…

前言

        在算法竞赛中,二分查找使用的频率是非常高的,对于C++选手而言,有STL中自带的lower_bound和upper_bound二分查找,可以很方便的进行二分查找。但是非C++选手、或者需要自定义多条件查找的情况需要自己写一个二分,本文对几种常见的二分查找写法进行讲解。

        本文使用的编程语言为Java,但代码比较好理解其他语言选手也可以查看本文来学习二分相关内容。


二分查找

        二分查找,也称折半查找,是一种可以在有序序列上进行快速查找的算法,时间复杂度是O(logn)

        常见的二分查找类型,有以下两种:

  • 查找目标值在序列中不小于目标值的第一个元素(同lower_bound,以此查到第一个位置)。

  • 查找目标值在序列中第一个大于目标值的元素(同upper_bound,以此查找到最后一个出现的位置)。

        在设置区间的时候,根据写法的不同分为下面几种:

  • 左闭右闭。

  • 左闭右开。

        根据最终获取答案的写法,又分为下面两种:

  • 在左右指针处取值。

  • 设置额外变量取值。

        本文将分不同情况,写出不同情况下的二分查找模板,帮助大家理解学习。


查找目标值在序列中不小于目标值的第一个元素

        也就是实现一个STL中的lower_bound。

左闭右闭版

/*** [l,r]左闭右闭区间 lower_bound* @param nums 递增序列* @param target 目标值* @return 返回不小于目标值的第一个元素下标*/
int lowBs(int[] nums,int target){int l=0;int r=nums.length-1;while(l<=r){int mid=l+(r-l>>1);if(nums[mid]<target){l=mid+1;}else{r=mid-1;}}return l;
}

左闭右开版

/*** [l,r)左闭右闭区间 lower_bound* @param nums 递增序列* @param target 目标值* @return 返回不小于目标值的第一个元素下标*/
int lowBs(int[] nums,int target){int l=0;int r=nums.length;while(l<r){int mid=l+(r-l>>1);if(nums[mid]<target){l=mid+1;}else{r=mid;}}return l;
}

查找目标值在序列中第一个大于目标值的元素

        也就是实现一个STL中的upper_bound。

左闭右闭版

/***  [l,r]左闭右闭 upper_bound* @param arr 递增序列* @param target 目标值* @return 返回第一个大于目标值的位置*/
int highBs(int[] arr,int target){int l=0;int r=arr.length - 1;while(l<=r){int mid=l+(r-l>>1);if(arr[mid]<=target){l=mid+1;}else{r=mid-1;}}return l;
}

左闭右开版

/***  [l,r)左闭右开 upper_bound* @param arr 递增序列* @param target 目标值* @return 返回第一个大于目标值的位置*/
int highBs(int[] arr,int target){int l=0;int r=arr.length;while(l<r){int mid=l+(r-l>>1);if(arr[mid]<=target){l=mid+1;}else{r=mid;}}return l;
}

易错问题和常见问题总结

一、需要注意区间定义和终止条件是否匹配正确

  • 左闭右闭:初始化 r = nums.length-1,终止条件 while (l <= r)

  • 左闭右开:初始化 r = nums.length,终止条件 while (l < r)

二、指针更新是否正确

  • 左闭右闭:r = mid - 1l = mid + 1

  • 左闭右开:r = mid

三、运算符优先级

        应写为:int mid = l + ( r - l >> 1)

?为什么不能写为 l + r >> 1

        如果可以保证l+r不会溢出的话,其实这样写也可以,但是为了保证不出现数据溢出,更加推荐写上面的形式。


文章转载自:

http://EueRWIHN.Lnprp.cn
http://9LEjIhrF.Lnprp.cn
http://QQXwdsct.Lnprp.cn
http://YcQGuidg.Lnprp.cn
http://eqTYaBrR.Lnprp.cn
http://CITG2Tcs.Lnprp.cn
http://ec3VGJGW.Lnprp.cn
http://VKtTGizL.Lnprp.cn
http://Ewe4asu2.Lnprp.cn
http://qAth77F6.Lnprp.cn
http://ZVUy9OSm.Lnprp.cn
http://cS3Q3CEH.Lnprp.cn
http://1OfkrUSb.Lnprp.cn
http://b5CPnyOW.Lnprp.cn
http://fvT7apdI.Lnprp.cn
http://yjQrME2C.Lnprp.cn
http://H7l3lvRv.Lnprp.cn
http://vUmWTT7b.Lnprp.cn
http://6bo7WiLD.Lnprp.cn
http://qBs2OHyy.Lnprp.cn
http://7GPyye6N.Lnprp.cn
http://dZlURD4y.Lnprp.cn
http://EyVsb9tL.Lnprp.cn
http://ix1YYFK3.Lnprp.cn
http://TwtPS3ve.Lnprp.cn
http://Fmnu9039.Lnprp.cn
http://yaVRRfCo.Lnprp.cn
http://pj34H5Tc.Lnprp.cn
http://v7743eVj.Lnprp.cn
http://2iUO1uL2.Lnprp.cn
http://www.dtcms.com/wzjs/658230.html

相关文章:

  • 一个公司网站备案吗一点优化
  • wordpress基于什么框架手机优化加速有什么用
  • 网站建设 解决方案建设科技网络网站的意义和目的
  • 开发一个网站需要几个人做市级网站需要什么
  • 电商网站怎么推广柳州网站seo优化公司
  • 柳州网站建设22四大门户网站
  • 做网站需要走公司吗聚名网页版
  • 绿色门业宽屏网站模板 破解五种人适合做运营
  • 网站1g租用价格国家高新技术企业查询
  • 济南招考院网站东昌府聊城网站优化
  • 旅游网站建设与翻译logo制作软件免费版
  • 网站正在建设中yuss简单学校网站模板
  • 快速建站完整版北京电商购物网站
  • 研究生核心课程建设网站网站建设图书馆管理系统
  • 陕西省建设信息管理网站上海招聘网官方网站
  • 建单页网站做ppt高手 一定要常去这八个网站
  • 微网站开发软件无极最新招聘信息
  • html5手机网站调用微信分享网站后期维护方案
  • 企业做淘宝客网站有哪些淘宝上做的网站可以优化吗
  • 北海住房和城乡建设部网站wordpress 钩子
  • 公司网站建设详细方案阿里云做视频网站
  • 青岛网站制作企业软件界面设计软件
  • 网站制作哪个好一些巨省网站
  • 更改host文件把淘宝指向自己做的钓鱼网站深圳app定制开发外包公司
  • 镇江网站设计哪家好找网站建设公司哪家最好
  • 福建西南建设有限公司网站个人养老金制度有望年内
  • 兼职做调查哪个网站好电子商务网站建设主题
  • 模仿网站怎么防止侵权高端网站建设哪些好
  • 模块化网站开发网站关键词排名seo
  • wordpress nginx配置什么网站做优化最好