解题思路:二分查找的思路,但是不能用递归,亲测会stackoverflow。那就只能用循环了,要想清终止条件,感觉蛮绕的,自己有待加强,要分析好久才能理清。需要注意的是,在取二分查找的中间值时,不要使用左右相加后再除以2的方式,这样可能会在计算时产生溢出。
/* The isBadVersion API is defined in the parent class VersionControl.
boolean isBadVersion(int version); */
public class Solution extends VersionControl {
public int firstBadVersion(int n) {
if(n == 1) {
return 1;
}
if(isBadVersion(1)) {
return 1;
}
int l = 1;
int r = n;
int m;
while(true) {
m = l + (r-l)/2;
if(m == l)
return r;
if(isBadVersion(m)) {
r = m ;
}
else {
l = m ;
}
}
}
}