第一个出错的版本号
代码库的版本号是从 1 到 n 的整数。某一天,有人提交了错误版本的代码,因此造成自身及之后版本的代码在单元测试中均出错。请找出第一个错误的版本号。
你可以通过 isBadVersion
的接口来判断版本号 version 是否在单元测试中出错,具体接口详情和调用方法请见代码的注释部分。
我所犯的错1,刚开始没有后面注释为问好的语句,我开始是直接return start;这样在只有最后一个版本号出错的时候就会出问题,应该输出n的结果是n-1。
2,如果是直接 return end;这样在所有的版本号有问题的时候就会出问题,应该输出为1,结果输出2. 因为当程序进行的 start = 1,end=2的时候就会退出while(),当执行return end的时候就会出错。
3, mid = (start+end)/2; 当n为2147483647的时候就会溢出
mid = start + (end - start)/2; 这样会防止溢出,如果是n=2147483647的时候就不会溢出。
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; } }