二分查找实例分析 --第一个错误的版本

java二分查找分析总结

二分法应用举例 在这里插入图片描述

由于此处的数组已经排好序,只要找到分界点即可,所以直接用二分法查找到第一个错误的版本即可。

二分法思路

一个集合按顺序查找某一个元素,步骤繁琐,效率不高,对已经排好序的集合,可以用二分法,快速定位到某个特定的元素。二分法将整个集合分为三部分,左边区域,中间的数,和右边区域,如果中间的数与目标相等,就停止二分,如果不相等,则进入对应的区域继续二分,直到查找到对应的元素为止。

算法 --以二分法实现上面的实例

  • 步骤
    • 1:参数初始化
      • left:目标区域左边界索引
      • right:目标区域右边界索引
      • mid:区域中点
    • 2:二分迭代
      • 判断迭代是否应该结束,即区域内只有一个元素或者没有元素,left>right
      • 计算mid
      • 判断mid与所需元素的关系
      • 选择左右两个区域作为下次迭代的目标区域,更新right或者left的值就可以得到此番效果。
    • 3:返回目标索引
      • 返回left(或right)(此处元素一定在集合中,最后right == left, 若需要查找的元素并不在集合之中,最后left>right)

代码如下:

publiv int firstBadVersion(int n){
    int left = 1;
    int right = n;
    int mid = 0;
    while(left < right){
	mid = left + (right - left)/2;  // 防止整数溢出, 不能写成(left+right)/2
	if(isBadVersion(mid)){
	    right = mid;
	}else{
	    left = mid+1;
	}
    }
    return left;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值