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!
評論