###### tags: `LeetCode` `Medium` `Binary Search` # LeetCode #875 [Koko Eating Bananas](https://leetcode.com/problems/koko-eating-bananas/) ### (Medium) KoKo喜歡吃香蕉。這裡有 N 堆香蕉,第 i 堆中有 piles[i] 根香蕉。警衛已經離開了,將在 H 小時後回來。 KoKo可以決定她吃香蕉的速度 K (單位:根/小時)。每個小時,她將會選擇一堆香蕉,從中吃掉 K 根。如果這堆香蕉少於 K 根,她將吃掉這堆的所有香蕉,然後這一小時內不會再吃更多的香蕉。   KoKo喜歡慢慢吃,但仍然想在警衛回來前吃掉所有的香蕉。 返回她可以在 H 小時內吃掉所有香蕉的最小速度 K(K 為整數)。 --- 由於可以分次吃, 所以令初始左值為1, 初始右值為1000000000(題目上界), 代表一小時能吃的香蕉數。 判斷在中值的吃香蕉速度時需要花多少小時吃完, 若花費時間大於H, 則代表每小時吃的香蕉數太少, 將左值改為中值+1, 反之則將右值改為中值。 --- ``` class Solution { public: int minEatingSpeed(vector<int>& piles, int h) { int l=1, r=1000000000; while(l<r){ int m=l+(r-l)/2, total=0; for(int p:piles){ total+=(p + m - 1) / m; } if(total>h)l=m+1; else r=m; } return l; } }; ```