Intuition
The set of eating speeds is monotonic: if Koko can finish at speed k, she
can also finish at every larger speed. That monotonicity lets us binary-search
the smallest feasible k in [1, max(piles)].
Explanation
Approach
lo = 1,hi = max(piles).mid = (lo + hi) // 2. Compute hours needed at speedmid:sum(ceil(p / mid) for p in piles).- If hours
<= h,hi = mid(try smaller). - Else
lo = mid + 1. - Return
lo.
The hours formula
At speed k, pile of size p takes ⌈p / k⌉ hours, which in Python is
-(-p // k) or (p + k - 1) // k.
Implementation
class Solution {
public int minEatingSpeed(int[] piles, int h) {
int lo = 1, hi = 0;
for (int p : piles) hi = Math.max(hi, p);
while (lo < hi) {
int mid = (lo + hi) / 2;
long hours = 0;
for (int p : piles) hours += (p + mid - 1) / mid;
if (hours <= h) {
hi = mid;
} else {
lo = mid + 1;
}
}
return lo;
}
}