https://leetcode-cn.com/problems/first-bad-version/
用二分法来做,例子:[1,2,3,···,n],(其中,左起点可以为任意小于n的值,不一定为1),1~n中间的数的求法:
int mid = (1+n)/2;
或者
int mid=1+(n-1)/2
但是,使用int mid = (left + right) / 2的这种方式在做此题时,会超出时间限制,原因是:left+right的值可能会溢出。
解法:
/* 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+1;
}
}
return left;
}
}