原题出处:https://leetcode.cn/leetbook/read/top-interview-questions-easy/xnto1s/
解法一:
/* 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 start = 1,end = n;
while (start < end) {
int mid = start+(end-start)/2;
if (!isBadVersion(mid)) {
start = mid +1;
} else {
end = mid;
}
}
return start;
}
}
思路:二分查找法,就是找到中间值,校验是否为坏版本,若不是坏版本,则将当前中间版本加一再赋值给起始查找值,如果是坏版本则将中间值赋值给终止值即可。
这里int mid = start+(end-start)/2;而不使用int mid = (start+end)/2 是因为如果end的值过大就会超出int值的范围,会造成数据溢出,故而使用start+(end+start)/2。