# 875-koko-eating-bananas Try it on leetcode ## Description

Koko loves to eat bananas. There are n piles of bananas, the ith pile has piles[i] bananas. The guards have gone and will come back in h hours.

Koko can decide her bananas-per-hour eating speed of k. Each hour, she chooses some pile of bananas and eats k bananas from that pile. If the pile has less than k bananas, she eats all of them instead and will not eat any more bananas during this hour.

Koko likes to eat slowly but still wants to finish eating all the bananas before the guards return.

Return the minimum integer k such that she can eat all the bananas within h hours.

 

Example 1:

Input: piles = [3,6,7,11], h = 8
Output: 4

Example 2:

Input: piles = [30,11,23,4,20], h = 5
Output: 30

Example 3:

Input: piles = [30,11,23,4,20], h = 6
Output: 23

 

Constraints:

## Solution(Python) ```Python class Solution: def minEatingSpeed(self, piles: List[int], h: int) -> int: return self.binarySearch(piles, h) # minimum possible speed will be 1 # maximum possible speed will be m largest pile size # which gives us range # then try every possible speed values starting from lowest speed # until condition is met # # Time Complexity: O(mn) # Space Complexity: O(1) def bruteforce(self, piles: List[int], h: int) -> int: speed = 1 while True: hour_spend = 0 for pile in piles: hour_spent += ceil(pile / speed) if hour_spent <= h: return speed else: speed += 1 # since bruteforce searches on the range of increasing list # binary search will halves the search space by log m # # binary search control relies on finding the condition of spearater # line between the search space # if x banana per second satisfies means x+1 banana per second also # satisfies the time criteria so ignore x+1 # if x bps doesnot satifies then ignore x-1 # Time Complexity: O(nlogM) # Space Complexity:O(1) def binarySearch(self, piles: List[int], h: int) -> int: left = 1 right = max(piles) while left < right: mid = (left + right) // 2 hour_spend = 0 for pile in piles: hour_spend += ceil(pile / mid) if hour_spend <= h: right = mid else: left = mid + 1 return left ```