二分查找法
您目前正在领导一个团队开发新产品。不幸的是,你方产品的最新版本未通过质量检查。自从申每个版本都是在前一 版本的基础上开发的,在一个坏版本之后的所有版本也是坏的。假设你有n个版本[1,2。。。n] 你想知道导致下面所有的版本都是坏的第一个坏的版本,你得到了一个API 错误版本(版本号),将返回坏的版本。实现一个函数来查找第一个错误版本。你应该限制对API的调用次数
示例:
1 2 3 4 5 6 7 8 9 1 0
G G G B B B B B B B
public class FirstBadVersion {
private static int FIRST_BAD=4;
private static boolean isBadVersion(int version) {
if (version >= FIRST_BAD){
return true;
}
return false;
}
private static int firstBadVersion(int n) {
int low = 1;
int high = n;
while(low < high){
int mind = low + (high-low)/2;//防止high过大溢出
if (isBadVersion(mind)){
high = mind;///如果中间数是错误版本,右指针移动到中间数的位置
}else{
low = mind + 1;//如果中间数不是错误版本,左指针移动到中间数右移一位的位置
}
}
return low; //左指针大于等于右指针(数据重合,该值即为目标值),直接返回结果
}
public static void main(String[] args) {
int ret=firstBadVersion(10);
System.out.println(ret);
}
}