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

网站栏目划分竞价排名推广

网站栏目划分,竞价排名推广,大连h5建站,网络营销的四种模式🌈键盘敲烂,年薪30万🌈 目录 普通版本的二分查找: right只负责控制边界(少了两次比较): 时间复杂度更稳定的版本: BSLeftmost: BSRightmost: 普通版本的二分查找: …

🌈键盘敲烂,年薪30万🌈

目录

普通版本的二分查找:

right只负责控制边界(少了两次比较):

时间复杂度更稳定的版本:

BSLeftmost:

BSRightmost:


 

普通版本的二分查找:

  • 🏸细节1:循环判定条件是left <= right
  • ⭐细节2:mid = (left + right ) >>> 1 原因见代码注释

/**** 二分查找的实现 3个版本* 时间复杂度:O(longn)* 空间复杂度:O(1)** 细节1:循环判定条件是left <= right* 细节2:mid计算要用 >>> 因为left + right 可能越界*      例如:right = Integer.MAX_INT-1 left = 0;*      第一轮计算没问题 假设mid < target*      left = mid + 1; 这是后left+ right 就超出int的最大范围,变成负数*      原因很简单:java没有无符号数,最高位表示符号位,/ 运算是先将补码转原码 >>>位运算是直接再二进制上运算*/
public class Demo1 {public static void main(String[] args) {int[] nums = {1,4,6,8,15,76,145};int target = 145;int index1 = method1(nums, target);System.out.println(target + "索引为" + index1);System.out.println(target + "索引为" + index2);}private static int method1(int[] nums, int target) {int left = 0, right = nums.length-1;while(left <= right){//细节 用无符号右移运算符int mid = (left + right) >>> 1;if(nums[mid] > target){right = mid - 1;}else if (nums[mid] < target){left = mid + 1;}else{return mid;}}return -1;}
}

right只负责控制边界(少了两次比较):

  • 改动1:while条件是left < right
  • 改动2:right = nums.length
public class Demo1 {public static void main(String[] args) {int[] nums = {1,4,6,8,15,76,145};int target = 145;int index2 = method2(nums, target);System.out.println(target + "索引为" + index2);}
}private static int method2(int[] nums, int target) {int left = 0, right = nums.length; //right 只代表有边界,不参与比较while(left < right){int mid = (left + right) >>> 1;if(nums[mid] < target){left = mid + 1;}else if(nums[mid] > target){right = mid;}else {return mid;}}return -1;}

时间复杂度更稳定的版本:

  • 细节:减少了if比较次数
public class Demo1 {public static void main(String[] args) {int[] nums = {1,4,6,8,15,76,145};int target = 145;int index3 = method3(nums, target);System.out.println(target + "索引为" + index3);}
}    private static int method3(int[] nums, int target) {//这个最牛逼//减少循环内的比较次数int left = 0, right = nums.length;while(1 < right - left){int mid = (left + right) >>> 1;if(nums[mid] > target){right = mid;}else{left = mid;}}if(nums[left] == target){return left;}return -1;}

BSLeftmost:

/**** 应用:求成绩排名  求前任*/
public class Leftmost {public static void main(String[] args) {int[] nums = {1,2,4,4,4,6,7};int target = 3;/**** params* return 找到了 - 返回靠左的下标*        没找到 - 返回>target的最靠左下标*/int ans = BSLeftmost(nums, target);System.out.println(ans);}private static int BSLeftmost(int[] nums, int target) {int left = 0, right = nums.length -1;while(left <= right){int mid = (left+right) >>> 1;if(target > nums[mid]){left = mid + 1;} else{right = mid - 1;}}return left;}
}

BSRightmost:

/**** 求后任*/
public class Rightmost {public static void main(String[] args) {int[] nums = {1,2,4,4,4,6,7};int target = 3;/*** return 找到了返回下标*        没找到返回 <= targer的最靠右索引**/int ans = BSRightmost(nums, target);System.out.println(ans);}private static int BSRightmost(int[] nums, int target) {int left = 0, right = nums.length-1;while(left <= right){int mid = (left + right) >>> 1;if(target >= nums[mid]){left = mid + 1;}else {right = mid - 1;}}return left - 1;}
}
http://www.yayakq.cn/news/15944/

相关文章:

  • 如何做淘客网站源码服装网站建设策划案
  • 添加qq好友的超链接做网站上土巴兔装修土巴兔装修
  • 公司网站如何在百度上能搜索到佛山品牌网站设计
  • 泉州建站模板搭建个人简历怎么写
  • 惠阳网站优化国家企业信用公示系统官方网站
  • microsoft做网站公共资源交易中心网
  • 建立网站内容需要做的事乐清市规划图高清
  • 向国旗敬礼 做新时代好少年网站重庆工商大学
  • 莞城网站仿做pc网站 公众号数据互通
  • 网站建设总流程图广告平面设计作品
  • 网站建设完成以后应该怎样备份宁波公司网站建设价格
  • 建设一个网站需要什么人员周口高端网站建设
  • dede手机网站模板制作大连模板网站制作哪家好
  • 邯郸企业做网站报价衡阳微信网站开发
  • 北京市网站备案公司百度官网优化
  • 织梦做的网站怎么传到网上展会设计公司简介
  • 网站的优势和劣势phpstudy 网站空白
  • aspnet网站开发到部署流程长尾关键词挖掘词
  • 济南做网站要多少钱绍兴模板建站代理
  • 公司网站建设的目标分销商家
  • 朔州网站建设费用注册一个网页多少钱
  • 官方网站开发公司排名扬州市城乡建设局网站首页
  • 淘宝客网站源码加各类插件西安到成都
  • 网站空间不够用好的网站设计网站
  • asp网站例子防火墙放行图片域名
  • 建立网站需要技术吗网页制作培训班培训
  • 中职教材 网站建设本地南昌网站建设公司
  • 摄影网站建设目的佛山建站怎么做
  • 适合新手做的网站静态生活服务信息类网站建设
  • 制作网站的固定成本网站推广平台