第一个错误的版本–java–二分
思路:这道题最容易想到的就是从1开始遍历到n,第一次调用提供的API结果为true的数即为答案。然而,顺序遍历有序序列,一般也可以用二分思想来做,并且可以将时间复杂度降为O(logN)。目标是找到第一次调用提供的API结果为true的数,可利用二分思想,首先将 left 指向1,而 right 指向 n ,每次计算 left 和 right 的中间值 mid 对应的API是否为 true ,如果为 true ,则将 mid 赋值给 right ,如果为 false ,将mid + 1 赋值给left,直 到 left == right 的时候结束循环。最后返回 left 的值。
下面来看一个例子会更好理解:
代码如下:
/* 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 left = 1;
int right = n;
while( left < right ){
int mid = left + (right - left) / 2;
if( isBadVersion(mid) ){
right = mid;
}else{
left = mid;
++left;
}
}
return left;
}
}