【一次過】Lintcode 74. 第一個錯誤的程式碼版本
阿新 • • 發佈:2018-12-24
程式碼庫的版本號是從 1 到 n 的整數。某一天,有人提交了錯誤版本的程式碼,因此造成自身及之後版本的程式碼在單元測試中均出錯。請找出第一個錯誤的版本號。
你可以通過 isBadVersion
的介面來判斷版本號 version 是否在單元測試中出錯,具體介面詳情和呼叫方法請見程式碼的註釋部分。
樣例
給出 n=5
呼叫isBadVersion(3)
,得到false
呼叫isBadVersion(5)
,得到true
呼叫isBadVersion(4)
,得到true
此時我們可以斷定4
是第一個錯誤的版本號
挑戰
呼叫 isBadVersion
注意事項
請閱讀上述程式碼,對於不同的語言獲取正確的呼叫 isBadVersion 的方法,比如java的呼叫方式是SVNRepo.isBadVersion(v)
解題思路:
典型的二分搜尋,注意mid不能整數溢位需要l + (r-l)/2
/** * public class GitRepo { * public static boolean isBadVersion(int k); * } * you can use GitRepo.isBadVersion(k) to judge whether * the kth code version is bad or not. */ public class Solution { /** * @param n: An integer * @return: An integer which is the first bad version. */ public int findFirstBadVersion(int n) { // write your code here int l =1; int r = n; while(l < r){ int mid = l+(r-l)/2; if(SVNRepo.isBadVersion(mid) == false) l = mid + 1; else r = mid; } return l; } }