例题:
你是产品经理,目前正在带领一个团队开发新的产品。不幸的是,你的产品的最新版本没有通过质量检测。由于每个版本都是基于之前的版本开发的,所以错误的版本之后的所有版本都是错的。
假设你有 n 个版本 [1, 2, ..., n],你想找出导致之后所有版本出错的第一个错误的版本。
public class Solition extends VersionControl{
public int firstBadVersion(int n){
int left = 1;
int right = n;
while(left <= right){
//向下取中位数,防止内存泄漏
int mid = left + ((right-left)/2);
if(isBadVersion(mid)){
//若m为错误版本,则正确的版本为[i,m-1]之间
right = mid - 1;
}else{
left = mid + 1;
//若m为正确版本,则错误版本在[m+1,j]之间
}
}
//i指的是首个错误版本,j 指的是最后一个正确的版本
return left;
}
}