正确答案:
public int firstBadVersion(int n) {
int left = 1;
int right = n;
while(left < right) {
int mid = left + (right - left) / 2;
if(isBadVersion(mid)){
right = mid;
}else{
left = mid+1;
}
}
return left;
}
为什么下面的代码错误
public int firstBadVersion(int n) {
int left = 1;
int right = n;
int resMid = 0;
while(left <= right){
int mid = left + (right - left) / 2;
if(isBadVersion(mid)){
resMid = mid;
right = mid--;
}else{
left = mid++;
}
}
return resMid;
}

这篇博客探讨了两种不同的二分查找实现,其中一种存在错误。错误的代码在更新边界条件时错误地使用了后置递减和前置递增,导致可能错过正确答案。正确的实现确保了在搜索区间内逐步缩小范围,直到找到第一个坏版本或搜索区间缩为0。

被折叠的 条评论
为什么被折叠?



