敘述
這是 Algorithm I
的第一天第二個題目,總共有三題。
- 難度:
Easy
- 花費時間: 2hr
- 題目
你控制著一個專案的版本紀錄,而這個專案在較新的版本出錯了(Bad Version
),
不幸的是,專案的每個版本都是構建於上個版本下,所以你需要找出他具體從哪個版本之後就出錯了。
給你一個 api: isBadVersion
,你要找出哪個版本是第一個錯誤版本,並且盡量減少呼叫 isBadVersion
的次數。
點我開啟限制與範例
限制:
1 <= bad <= n <= 231 - 1
Example 1:
1 | Input: n = 5, bad = 4 |
Example 2:
1 | Input: n = 1, bad = 1 |
筆記
運用 Binary Search 即可,問題是如何寫:
- 設定左邊(left)為 1 ,右邊(right)為 n 。
- 只要 right > left 就繼續找。
- 算出中點(middle) = (right + left) / 2
- isBadVersion(middle):
- true: 把右邊移到中間。
- false: 把左邊移到中間 + 1 ,(因為這個點已經是false了,所以沒有繼續比較的必要,且最後幾位數在比較時會變成 right == left,此時便跳出迴圈)。
- 回傳 right ,因為right自始自終都是 ture 的那個版本,所以算到最後,他就會剛好是錯誤第一版。
程式碼
1 | /** |