题目并不难,思想用二分查找来做
<span style="font-size:18px;">// Forward declaration of isBadVersion API.
bool isBadVersion(int version);
int firstBadVersion(int n) {
unsigned int start = 1,end = n;
int medium = (double)n/2 + (double)1/2;
while(medium <= n && medium > 0 && end > start){
if(isBadVersion(medium)){
if(medium - 1 >= start && !isBadVersion(medium - 1)){
return medium;
//break;
}else{
end = medium - 1;
if(end < start || end < 1)
break;
}
}else{
if(medium + 1 <= end && isBadVersion(medium + 1)){
//break;
return medium+1;
}else{
start = medium +1;
printf("start:%u\n",start);
if(end < start || start > n )
break;
}
}
if(end%2 && start%2)
medium = end/2 + start/2 + 1;
else
medium = end/2 + start/2;
}
return medium;
}</span>
这个题目恶心在,中间有个例子的version是2147483647,恰好是int类型的最大上界
所以二分查找中的时候取中位数的时候导致越界,从而出错
更改了一下变量类型,并在处理中位数细节的时候进行注意才算通过