Skip to content

Commit 58878fd

Browse files
authored
Update Koko Eating Bananas.java
1 parent 41ffff1 commit 58878fd

File tree

1 file changed

+15
-22
lines changed

1 file changed

+15
-22
lines changed

Medium/Koko Eating Bananas.java

Lines changed: 15 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,26 @@
11
class Solution {
22
public int minEatingSpeed(int[] piles, int h) {
3-
int minBananaCount = 1;
4-
int maxBananaCount = maxFromPile(piles);
5-
while (minBananaCount < maxBananaCount) {
6-
int mid = (minBananaCount + maxBananaCount) / 2;
7-
if (canFinishPile(piles, mid, h)) {
8-
maxBananaCount = mid;
3+
int start = 1;
4+
int end = 0;
5+
for (int pile : piles) {
6+
end = Math.max(end, pile);
7+
}
8+
while (start <= end) {
9+
int mid = start + (end - start) / 2;
10+
if (isPossible(piles, mid, h)) {
11+
end = mid - 1;
912
} else {
10-
minBananaCount = mid + 1;
13+
start = mid + 1;
1114
}
1215
}
13-
return minBananaCount;
16+
return start;
1417
}
1518

16-
private boolean canFinishPile(int[] piles, int bananaPerHour, int totalHours) {
17-
int totalTime = 0;
19+
private boolean isPossible(int[] piles, int k, int h) {
20+
int numOfHours = 0;
1821
for (int pile : piles) {
19-
int numOfHours = pile / bananaPerHour;
20-
totalTime += numOfHours == 0 ? 1 : numOfHours;
21-
totalTime += numOfHours > 0 && pile % bananaPerHour != 0 ? 1 : 0;
22-
}
23-
return totalTime <= totalHours;
24-
}
25-
26-
private int maxFromPile(int[] piles) {
27-
int maxCount = piles[0];
28-
for (int i = 1; i < piles.length; i++) {
29-
maxCount = Math.max(maxCount, piles[i]);
22+
numOfHours += Math.ceil((double) pile / k);
3023
}
31-
return maxCount;
24+
return numOfHours <= h;
3225
}
3326
}

0 commit comments

Comments
 (0)