↓快轉到主要內容
  1. LeetCode/

LeetCode 278: First Bad Version

·1 分鐘· ·
LeetCode Easy Binary-Search Interactive
Wei Yi Chung
作者
Wei Yi Chung
Working at the contributing of open source, distributed systems, and data engineering.
目錄

基本資料
#

難易度: easy 第一次嘗試:2022-08-23

  • 提交紀錄:Accepted ×3

解題思路
#

壞掉之後的版本都是壞的,isBadVersion 從某個版本開始一直是 True,找第一個(Binary Search 模板一):mid 是壞的就 r = mid,否則 l = mid + 1。

我的解法
#

class Solution:
    def firstBadVersion(self, n: int) -> int:
        l, r = 1, n
        while l < r:
            mid = (l + r) // 2
            if isBadVersion(mid):
                r = mid
            else:
                l = mid + 1
        return l

複雜度
#

時間 O(log n),空間 O(1)。

要特別避免的錯誤
#

  • 壞的版本可能就是第一個,r = mid 而不是 mid - 1。

面試口說整理
#

壞版本之後都是壞的,所以我用 lower bound 二分:中間是壞的就把右界縮到中間,否則左界移到中間的下一個。時間 O(log n)。

相關文章

LeetCode 374: Guess Number Higher or Lower
·1 分鐘
LeetCode Easy Binary-Search Interactive
LeetCode 374 解題筆記:依 guess 的回傳值調整範圍;-1 代表猜太大,1 代表猜太小
LeetCode 349: Intersection of Two Arrays
·1 分鐘
LeetCode Easy Array Hash-Table Two-Pointers Binary-Search
LeetCode 349 解題筆記:兩個陣列各轉成集合取交集
LeetCode 350: Intersection of Two Arrays II
·1 分鐘
LeetCode Easy Array Hash-Table Two-Pointers Binary-Search
LeetCode 350 解題筆記:保留重複次數的交集,Counter 相交(&)取兩邊次數的較小值
LeetCode 268: Missing Number
·1 分鐘
LeetCode Easy Array Hash-Table Math Binary-Search
LeetCode 268 解題筆記:0 到 n 的總和減掉陣列總和就是缺的那個;缺的可能是 0
LeetCode 367: Valid Perfect Square
·1 分鐘
LeetCode Easy Math Binary-Search
LeetCode 367 解題筆記:在 [1, num] 上二分找 mid² == num,不用 sqrt
LeetCode 69: Sqrt(x)
·1 分鐘
LeetCode Easy Math Binary-Search Newtons-Method
LeetCode 69 解題筆記:找最大的 mid 讓 mid² <= x;閉區間二分結束時 r 就是答案