// Forward declaration of isBadVersion API.
bool isBadVersion(int version);
class Solution {
public: //双指针二分查找法
int firstBadVersion(int n) {
int left =0;
int right=n;
long check;
while(left<=right){
check=left+(right-left)/2; //(left+right)/2 int overflow
if(isBadVersion(check)){
if(!isBadVersion(check-1))
return check;
else{
right=check-1;
}
}
else{
if(isBadVersion(check+1))
return check+1;
else
left=check+1;
}
}
return -1;
}
};
上述方法很耗时,调用API O(2log(n))次,可以用左右边界相遇找正误版本边界。
调用API O(log(n)) 次。