875. Koko Eating Bananas
題目網址: https://leetcode.cn/problems/koko-eating-bananas/
題意: Koko 喜歡吃香蕉。這里有
n
堆香蕉, 第i
堆中有piles[i]
根香蕉。警衛已經離開了, 並且將在h
小時後回來。Koko 可以決定她吃香蕉的速度
k
(單位:根 / 小時)。每個小時, 她將會選擇其中一堆的香蕉, 並從中吃掉k
根。如果這堆香蕉少於k
根, 她將吃掉這堆所有的香蕉, 然後這一小時內都不會再吃更多的香蕉。Koko 喜歡慢慢吃, 但仍然想在警衛回來前吃掉所有的香蕉。
返回她可以在
h
小時內吃掉所有香蕉的最小速度k
, 其中k
為整數。
Solution:
想法:利用 Binary Search, 其中
k
的區間為[1, max(piles)]
, 因為 Koko 吃掉該堆所有的香蕉後, 這一小時內都不會再吃更多的香蕉, 所以k
取到max(piles)
即可。此外,left
不能為0
, 否則mid
有可能為0
, 這會導致計算time += ceil(1.0 * pile / mid)
時發生錯誤
class Solution { |
- time:$O(n \cdot log(m))$ ➔ 其中
n
為piles
的長度,m
為piles
中的最大值- $O(log(m))$ : Binary Search 的次數
- $O(n \cdot log(m))$ : 每一次 Binary Search 皆須 $O(n)$, 因為計算出 mid 後, 皆須遍歷
piles
- space:$O(1)$ ➔ 只需常數空間
本部落格所有文章除特別聲明外,均採用 CC BY-NC-SA 4.0 許可協議。轉載請註明來自 Zako's Blog!
評論