描述
代碼庫的版本號是從 1 到 n 的整數(shù)。某一天,有人提交了錯誤版本的代碼,因此造成自身及之后版本的代碼在單元測試中均出錯。請找出第一個錯誤的版本號。你可以通過 isBadVersion 的接口來判斷版本號 version 是否在單元測試中出錯,具體接口詳情和調(diào)用方法請見代碼的注釋部分。
注意事項
請閱讀上述代碼,對于不同的語言獲取正確的調(diào)用 isBadVersion 的方法,比如java的調(diào)用方式是SVNRepo.isBadVersion(v)
樣例
給出 n=5
調(diào)用isBadVersion(3),得到false
調(diào)用isBadVersion(5),得到true
調(diào)用isBadVersion(4),得到true
此時我們可以斷定4是第一個錯誤的版本號
挑戰(zhàn)
調(diào)用 isBadVersion 的次數(shù)越少越好
思路
本題從第一個錯誤開始,之后一系列數(shù)全部錯誤,尋找第一份錯誤,實際上就是經(jīng)典二分法模板加一個SVNRepo.isBadVersion函數(shù)調(diào)用
代碼
class Solution {
public int findFirstBadVersion(int n) {
int start = 1;
int end = n;
while (start + 1 < end) {
int mid = start + (end - start) / 2;
if (SVNRepo.isBadVersion(mid)) {
end = mid;
}
else {
start = mid;
}
}
if (SVNRepo.isBadVersion(start)) {
return start;
}
else {
return end;
}
}
}