题目:
278 First Bad Version:
You are a product manager and currently leading a team to develop a new product. Unfortunately, the latest version of your product fails the quality check. Since each version is developed based on the previous version, all the versions after a bad version are also bad.
Suppose you have n versions [1, 2, …, n] and you want to find out the first bad one, which causes all the following ones to be bad.
You are given an API bool isBadVersion(version) which will return whether version is bad. Implement a function to find the first bad version. You should minimize the number of calls to the API.
C++实现:
// Forward declaration of isBadVersion API.
bool isBadVersion(int version);
class Solution {
public:
int firstBadVersion(int n) {
//search range begin~end
int begin = 1;
int end = n;
int badVersion = -1;
int num = int(log(float(n))/log(2.0)) + 2;//iterator number
if (isBadVersion(begin)) {return begin;}//for no bad version
if (!(isBadVersion(end))) {return -1;}//for no good version
for (int i=1; i<=num; i++)
{
//起始点是不是bad version
if (isBadVersion(begin+1))
{
badVersion = begin+1;
break;
}
//结尾处是不是good version
if ((!(isBadVersion(end-1))))
{
badVersion = end;
break;
}
//二分法缩小范围
if (isBadVersion(int(begin/2+end/2)))
{
end = int(begin/2+end/2);
}
else
{
begin = int(begin/2+end/2);
}
}
return badVersion;
}
};