你的 product 在某個版本壞!掉!了!找出引入錯誤的那一版
輸入為 n ,代表你有 1, 2, ... ,n 個版本
例:G 代表好的版本,B代表壞掉的,找出壞掉的第一版
1, 2, 3, 4, 5, ... ,n
G, G, G, G, B, ... ,B
↑
ans: 5
提供一個 API 用以確認該版本是否為 BadVersion, isBadVersion(version)
從 version 1 開始確認,逐版本檢查直到找到 BadVersion 為止,TC: O(n),LeetCode 上會 TLE.
利用 binary search 來找。 TC: O(log n)
func firstBadVersion(n int) int {
l, r := 1, n
bestAns := 0
for l <= r {
m := l + (r-l)/2
if isBadVersion(m) {
bestAns = m
r = m - 1
} else {
l = m + 1
}
}
return bestAns
}
binary search 很常見,實際開始寫才發現各種細節、跟邊界處理還滿多的。
2026-6 的我對這個解法的認知是 search on answer 用來搜空間中可能的答案並一個一個驗證。可以用於答案帶有單調性的時候,意即,如果版本 N 是 BadVersion, 那所有大於 N 的 version must be bad version.