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.
题目本身很简单,用二分法就可以,但是最后超时,百思不得其解,原来问题出在min=(low+high)/2身上!
之前也有一道题是这样,原因是数字可能太大,直接相加超出整数表示范围,溢出。
需要把求mid的公式写成mid=low+(high-low)/2.
详细分析见点击打开链接
// Forward declaration of isBadVersion API.
bool isBadVersion(int version);
class Solution {
public:
int firstBadVersion(int n) {
int i = 1, j = n, mid;
while(i <= j){
mid = i + (j - i) / 2;
if(isBadVersion(mid)){
j = mid - 1;
}else i = mid + 1;
}
return i;
}
};