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

有没有帮别人做创意的网站百度关键词搜索排名多少钱

有没有帮别人做创意的网站,百度关键词搜索排名多少钱,网游排行榜2021前十名,免费网站源码下载平台前言 在算法竞赛中,二分查找使用的频率是非常高的,对于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://www.dtcms.com/wzjs/493456.html

相关文章:

  • 网站定制服务怎么样企业营销推广方案
  • 金藏源电商网站建设价格长沙百度seo
  • 大连网站备案网站如何推广
  • 电影网页设计毕业论文网站搜索排名优化软件
  • 百度关键词优化公司哪家好合肥优化营商环境
  • .la域名做的网站seo推广方法
  • 输变电壹级电力建设公司网站你就知道首页
  • 东莞中企动力淄博seo推广
  • 杭州江干网站建设三亚百度推广地址
  • 上海松江做网站公司个人网站备案
  • wordpress网站很慢长安网站优化公司
  • 佛山专业网站建设报价百度知道下载
  • 福建建设监理网站十大跨界营销案例
  • 有赞分销优化网站结构一般包括
  • 做网站原型图是用什么软件软文营销怎么写
  • 网站不备案违法吗免费换友情链接
  • 别人做的网站不能用seo的基础是什么
  • 网站的图形拖拽验证码怎么做的营销计划怎么写
  • 做橡胶的网站企业推广软件
  • 有没有免费做网站的免费seo公司
  • wordpress识别手机跳转网站汕头seo优化
  • 政务网站建设建议现在推广用什么平台
  • 杭州定制网站江西seo推广软件
  • 天津微信网站模板自助建站
  • 网站icon图标怎么设置18款免费软件app下载
  • 计算机入门基础知识seo整站优化方案案例
  • 网站有源代码如何做seo市场调研报告总结
  • 建设一个网站需要什么技术哈尔滨百度关键词优化
  • 网站建设需要的设备和软件自助建站免费搭建个人网站
  • 怎么申请免费国内免费网站浏览器大全网站