当前位置: 移动技术网 > IT编程>开发语言>C/C++ > 第一个错误的版本

第一个错误的版本

2018年04月03日  | 移动技术网IT编程  | 我要评论

陈松伶个人资料,新恋爱时代好看吗,green网络加速器

你是产品经理,目前正在领导一个团队开发一个新产品。不幸的是,您的产品的最新版本没有通过质量检查。由于每个版本都是基于之前的版本开发的,所以错误版本之后的所有版本都是不好的。

假设你有 n 个版本 [1, 2, ..., n],你想找出第一个错误的版本,导致下面所有的错误。

你可以通过 bool isBadVersion(version) 的接口来判断版本号 version 是否在单元测试中出错。实现一个函数来查找第一个错误的版本。您应该尽量减少对 API 的调用次数。

 

很容易想到二分法,时间复杂度为log(N),然后写了如下代码

// Forward declaration of isBadVersion API.
bool isBadVersion(int version);

class Solution {
public:
int firstBadVersion(int n) {
  int l=0;
  int r=n;
  int mid=0;
  while(l<r)
  {
    mid=(l+r)/2;
    if(!isBadVersion(mid))
      l=mid+1;
    else
      r=mid;
  }
  return l;
 }
};

然后自信满满提交,发现在过接近int范围的大数时出错了,百度下看了别人的代码才发现,

(l+r)/2在处理大数时会超出int范围,

从而修改代码

// Forward declaration of isBadVersion API.
bool isBadVersion(int version);

class Solution {
public:
int firstBadVersion(int n) {
  int l=0;
  int r=n;
  int mid=0;
  while(l<r)
  {
  mid=l+(r-l)/2;
  if(!isBadVersion(mid))
    l=mid+1;
  else
  r=mid;
  }
  return l;
  }
};

成功过。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网