leedcode-第一個錯誤的版本

Junior_bond發表於2024-03-27

自己寫的二分法:

class Solution:
    def firstBadVersion(self, n: int) -> int:
        # 初始化左右指標進行二分查詢
        left = 1
        right = n
        
        # 檢查第一個版本是否是壞版本
        if isBadVersion(1):
            return 1
        # 檢查最後一個版本是否是壞版本,並且倒數第二個版本是好版本
        if isBadVersion(n) and not isBadVersion(n - 1):
            return n

        # 執行二分查詢
        while left <= right:
            # 計算中間版本
            mid = left + (right - left) // 2
            
            # 如果中間版本是壞版本,則在左半部分繼續搜尋
            if isBadVersion(mid):
                right = mid - 1
                # 如果左指標超過右指標且當前中間版本是第一個壞版本,則返回中間版本
                if left >= right and not isBadVersion(mid - 1):
                    return mid
            # 如果中間版本不是壞版本,則在右半部分繼續搜尋
            else:
                left = mid + 1
                # 如果左指標超過右指標且中間版本的下一個是第一個壞版本,則返回中間版本的下一個版本
                if left >= right and isBadVersion(mid + 1):
                    return mid + 1

相關文章