1、题目描述
2、题目解答
题目跟704.二分查找解决逻辑一致,可参考:704. 二分查找
自增版本号,是一个有序的数组。可使用二分查找用于查找。
每次查找都会将查找范围缩小一半,因此二分查找的时间复杂度是 O(logn),其中 n 是版本的数量。二分查找的条件是查找范围不为空,即 left ≤ right。此时L=R,缩短到一个点,为目标答案。
完整代码如下:
public class Solution extends VersionControl {
public int firstBadVersion(int n) {
int L =1; int R = n;
while(L <= R){
int mid = (R-L)/2 +L;
if(isBadVersion(mid)){
R = mid-1;
}else{
L = mid+1;
}
}
//此时L=R,缩短到一个点,为目标答案
return L;
}
}
复杂度分析
-
时间复杂度 :O(logn),其中 n 是给定版本的数量。
-
空间复杂度:O(1)。我们只需要常数的空间保存若干变量。