875. Koko Eating Bananas

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
class Solution {
public int minEatingSpeed(int[] piles, int h) {
int left = 1, right = 1000000000; // 注意速度不能为 0
while (left < right) {
int mid = (left + right) >>> 1;
if (canEat(mid, piles, h)) {
right = mid;
} else {
left = mid + 1;
}
}

return left;
}

private boolean canEat(int speed, int[] piles, int h) {
int hour = 0;
for (int pile : piles) {
hour += pile / speed + (pile % speed != 0 ? 1 : 0);
if (hour > h) {
return false;
}
}

return true;
}
}

References

875. Koko Eating Bananas
剑指 Offer II 073. 狒狒吃香蕉