自己寫的二分法:
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