Koko Eating Bananas
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:
1 <= piles.length <= 104
piles.length <= h <= 109
1 <= piles[i] <= 109
Solution
We want to apply the binary search template, and implement the feasible
function.
Here, the feasible function is whether Koko can_finish_eating
all piles within h
hours while eating at speed k
per hour.
Since Koko eats at only one pile during each hour, ceil(float(p)/k)
is the time Koko takes to finish pile p
.
Note that p/k
does not work here because we want a whole number of hours so we needed to round up p/k
.
Therefore, the feasiblity is determined by whether Koko's hours_used
is within h
hours, where hours_used
is the total hours to finish all piles.
Recall example 1 with Input: piles = [3,6,7,11], h = 8
, and Output: 4
, the can_finish_eating
function returns the following results.
Implementation
def can_finish_eating(piles, h, k):
hours_used = 0
for p in piles:
hours_used += ceil(float(p)/k)
return hours_used <= h
def minEatingSpeed(piles, h):
left, right = 1, 1000000000 # 10^9 max length of the piles
ans = -1
while left <= right:
mid = (left + right) // 2
if can_finish_eating(piles, h, mid):
ans = mid
right = mid - 1
else:
left = mid + 1
return ans
Ready to land your dream job?
Unlock your dream job with a 2-minute evaluator for a personalized learning plan!
Start EvaluatorWhich of the two traversal algorithms (BFS and DFS) can be used to find whether two nodes are connected?
Recommended Readings
LeetCode Patterns Your Personal Dijkstra's Algorithm to Landing Your Dream Job The goal of AlgoMonster is to help you get a job in the shortest amount of time possible in a data driven way We compiled datasets of tech interview problems and broke them down by patterns This way we
Recursion Recursion is one of the most important concepts in computer science Simply speaking recursion is the process of a function calling itself Using a real life analogy imagine a scenario where you invite your friends to lunch https algomonster s3 us east 2 amazonaws com recursion jpg You first
Runtime Overview When learning about algorithms and data structures you'll frequently encounter the term time complexity This concept is fundamental in computer science and offers insights into how long an algorithm takes to complete given a certain input size What is Time Complexity Time complexity represents the amount of time
Want a Structured Path to Master System Design Too? Don’t Miss This!