---
# System prepended metadata

title: 'LeetCode #875 [Koko Eating Bananas](https://leetcode.com/problems/koko-eating-bananas/)'
tags: [Binary Search, LeetCode, Medium]

---

###### 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;
    }
};
```