题目: 查找第一个错误版本
注意:这里有个坑 就是当n很接近int类型可表示的最大范围,且第一个错误版本也很大时,计算折半位置时容易溢出
目前只想到下图所示代码的防止溢出计算方式
/* The isBadVersion API is defined in the parent class VersionControl.
boolean isBadVersion(int version); */
public class Solution extends VersionControl {
public int firstBadVersion(int n) {
int first = 1; //记录第一个版本
int last = n; //记录最后一个版本
int index =0;
while(first != last){
index = first + (last - first) / 2; //防止溢出
if(isBadVersion(index)){
//如果成立,表明是错误的,继续往前寻找第一个错误版本
//在[first,index]区间
last = index;
} else {
//表明不是错误的,继续往后寻找第一个错误版本
//在[index+1,last]区间
first = index + 1;
}
}
//跳出循环表示 first == last
return last;
}
}