二分查找法

二分查找法

您目前正在领导一个团队开发新产品。不幸的是,你方产品的最新版本未通过质量检查。自从申每个版本都是在前一 版本的基础上开发的,在一个坏版本之后的所有版本也是坏的。假设你有n个版本[1,2。。。n] 你想知道导致下面所有的版本都是坏的第一个坏的版本,你得到了一个API 错误版本(版本号),将返回坏的版本。实现一个函数来查找第一个错误版本。你应该限制对API的调用次数
示例:
1 2 3 4 5 6 7 8 9 1 0
G G G B B B B B B B

public class FirstBadVersion {

    private static int FIRST_BAD=4;

    private static boolean isBadVersion(int version) {
       if (version >= FIRST_BAD){
           return true;
       }
       return false;
    }

    private static int firstBadVersion(int n) {
      int low = 1;
      int high = n;
      while(low < high){
          int mind = low + (high-low)/2;//防止high过大溢出
          if (isBadVersion(mind)){
           high = mind;///如果中间数是错误版本,右指针移动到中间数的位置
          }else{
              low = mind + 1;//如果中间数不是错误版本,左指针移动到中间数右移一位的位置
          }
      }
       return low; //左指针大于等于右指针(数据重合,该值即为目标值),直接返回结果
    }

    public static void main(String[] args) {
        int ret=firstBadVersion(10);
        System.out.println(ret);
    }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值