方法一:
class Solution {
public:
int firstBadVersion(int n) {
int left = 1;
int right = n;
while (left <= right) {
int mid = (right-left)/2 + left;
// 只考虑一段,另一端不断缩进
/* 理解:
需要找到第一个bad的状态
若当前mid不是,则闭区间[left, mid]之间全不是
那第一个至少是mid+1的状态
其余什么都不用想
让另一边right = mid - 1即可(因为循环中是有=的)
*/
if (!isBadVersion(mid)) {
left = mid + 1;
} else {
right = mid - 1;
}
}
return left;
}
};
方法二:
class Solution {
public:
int firstBadVersion(int n) {
int left = 1;
int right = n;
while (left < right) {
int mid = (right-left)/2 + left;
// 只考虑一段&