第一个错误的版本
你是产品经理,目前正在领导一个团队开发一个新产品。不幸的是,您的产品的最新版本没有通过质量检查。由于每个版本都是基于之前的版本开发的,所以错误版本之后的所有版本都是不好的。
假设你有 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;
}
};
成功过。