第一个出错的版本号单元测试
代码库的版本号是从 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; } }