Koko Eating Bananas
JavaView on GFG
Advertisement
Intuition
Binary search on eating speed k. At speed k, hours needed = sum(ceil(pile/k)). Find minimum k where hours <= H.
Algorithm
- 1lo=1, hi=max(piles).
- 2Feasibility(k): sum(ceil(pile/k)) <= H.
- 3Return minimum feasible k.
Common Pitfalls
- •ceil(pile/k) = (pile+k-1)/k in integer arithmetic. Binary search on speed, not on hours.
Koko Eating Bananas.java
Java
// Approach: Binary search on eating speed k. For each k, check if Koko finishes all piles in H hours.
// Time: O(n log(max_pile)) Space: O(1)
import java.util.*;
class Solution {
public int kokoEat(int[] arr, int k) {
Arrays.sort(arr);
int ans = -1;
int low = 1;
int high = (int) 1e9;
while (low <= high) {
int mid = low + (high - low) / 2;
if (ispossible(arr, mid) <= k) {
ans = mid;
high = mid - 1;
} else
low = mid + 1;
}
return ans;
}
private int ispossible(int[] arr, int mid) {
int ans = 0;
for (int i = 0; i < arr.length; i++) {
int cnt = arr[i] / mid;
if (arr[i] % mid != 0)
cnt++;
ans += cnt;
}
return ans;
}
}
Advertisement
Was this solution helpful?