我们以力扣278题为例
这是原来的做法
// The API isBadVersion is defined for you.
// bool isBadVersion(int version);
class Solution {
public:
int firstBadVersion(int n) {
int left=1,right=n;
int mid;
if(n==1)return 1;
while(left<right){
mid=(right-left)/2+left;
if(isBadVersion(mid)){
right=mid;
}
else left=mid+1;
}
return left;
}
};
这是懒人做法,可以避免边界的讨论
// The API isBadVersion is defined for you.
// bool isBadVersion(int version);
class Solution {
public:
int firstBadVersion(int n) {
int left=1,right=n;
int mid;
if(n==1)return 1;
while(left<right){
mid=(right-left)/2+left;//防止超出int空间
if(isBadVersion(mid)){
right=mid;
}
else left=mid;
if((right-left)<10)break;
}
for(int i=left;i<=right;i++){
if(isBadVersion(i))return i;
}
return 0;
}
};
大家可以仔细对比下不同之处