1. 程式人生 > >【一次過】Lintcode 74. 第一個錯誤的程式碼版本

【一次過】Lintcode 74. 第一個錯誤的程式碼版本

程式碼庫的版本號是從 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;
    }
}