你是產品經理,帶領團隊開發新產品。不幸的是,最新版本未通過質量檢測。由於每個版本都基於前一個版本開發,壞版本之後的所有版本也是壞的。給定 n 個版本 [1, 2, ..., n],找出導致後續所有版本變壞的第一個壞版本。提供 API bool isBadVersion(version) 判斷版本是否為壞版本。要求盡可能少調用 API。
這是一道經典的二分查找問題。版本序列具有單調性:好版本在前,壞版本在後。我們在區間 [1, n] 上進行二分,若中間版本是壞的,則第一個壞版本在左側(含中間);否則在右側。循環直到左右邊界重合。
// Forward declaration of isBadVersion API.
bool isBadVersion(int version);
class Solution {
public:
int firstBadVersion(int n) {
int left = 1, right = n;
while (left < right) {
int mid = left + (right - left) / 2;
if (isBadVersion(mid)) {
right = mid;
} else {
left = mid + 1;
}
}
return left;
}
};