第一个错误的版本

2018-06-17 20:53:03来源:未知 阅读 ()

新老客户大回馈,云服务器低至5折

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

假设你有 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;
  }
};

成功过。

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:22.C++- 继承与组合,protected访问级别

下一篇:电梯模拟C++