我们以力扣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;
}
};
大家可以仔细对比下不同之处
本文对比了力扣278题中两种寻找`firstBadVersion`的解决方案,一种是传统边界讨论,另一种是懒人做法避免边界检查。通过实例展示了如何简化代码并提高效率。
4145

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



