第一個出錯的版本號單元測試
代碼庫的版本號是從 1 到 n 的整數。某一天,有人提交了錯誤版本的代碼,所以形成自身及以後版本的代碼在單元測試中均出錯。請找出第一個錯誤的版本號。測試
你能夠經過 isBadVersion
的接口來判斷版本號 version 是否在單元測試中出錯,具體接口詳情和調用方法請見代碼的註釋部分。spa
我所犯的錯1,剛開始沒有後面註釋爲問好的語句,我開始是直接return start;這樣在只有最後一個版本號出錯的時候就會出問題,應該輸出n的結果是n-1。code
2,若是是直接 return end;這樣在全部的版本號有問題的時候就會出問題,應該輸出爲1,結果輸出2. 由於當程序進行的 start = 1,end=2的時候就會退出while(),當執行return end的時候就會出錯。blog
3, mid = (start+end)/2; 當n爲2147483647的時候就會溢出接口
mid = start + (end - start)/2; 這樣會防止溢出,若是是n=2147483647的時候就不會溢出。it
public int findFirstBadVersion(int n) { // write your code here int start = 1; int end = n, mid= -1; while(start+1<end){ //mid = (start+end)/2; //當n爲2147483647的時候就會溢出 mid = start + (end - start)/2; //下面的語句好一點,這樣能夠防溢出, if(SVNRepo.isBadVersion(mid)){ end = mid; } else{ start = mid; } } if(SVNRepo.isBadVersion(start)){ //????到最後只有兩個元素須要判斷, return start; } else{ return end; } }