首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

LeetCode 278:尋找第一個壞版本(二分查找解法)

     編輯:關於C++

題目描述

你是產品經理,帶領團隊開發新產品。不幸的是,最新版本未通過質量檢測。由於每個版本都基於前一個版本開發,壞版本之後的所有版本也是壞的。給定 n 個版本 [1, 2, ..., n],找出導致後續所有版本變壞的第一個壞版本。提供 API bool isBadVersion(version) 判斷版本是否為壞版本。要求盡可能少調用 API。

解題思路

這是一道經典的二分查找問題。版本序列具有單調性:好版本在前,壞版本在後。我們在區間 [1, n] 上進行二分,若中間版本是壞的,則第一個壞版本在左側(含中間);否則在右側。循環直到左右邊界重合。

代碼實現 (C++)

// 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;
    }
};

複雜度分析

  • 時間複雜度:O(log n),每次調用 API 將搜索範圍減半。
  • 空間複雜度:O(1),僅使用常數額外空間。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved