很简单的二分搜索的题目,但是提交得时候在一个case:2126753390 versions 1702766719 is the first bad version TLE了。
原因是求中位数的时候公式使用得不恰当。或者将int改成long long int。
//int mid = (leftInd + rightInd) / 2; 会溢出
int mid = leftInd + (rightInd - leftInd) / 2;
// Forward declaration of isBadVersion API.
bool isBadVersion(int version);
class Solution {
public:
int firstBadVersion(int n) {
int leftInd = 1, rightInd = n;
while (leftInd <= rightInd) {
int mid = leftInd + (rightInd - leftInd) / 2;
//int mid = (leftInd + rightInd) / 2;
//cout << leftInd << " " << mid << " " << rightInd << endl;
if (isBadVersion(mid)) {
rightInd = mid - 1;
} else {
leftInd = mid + 1;
}
}
return leftInd;
}
};