Skip to content

Commit 1172edf

Browse files
committed
feat: add solutions to lcof2 problem: No.073.Koko Eating Bananas
1 parent 83afc09 commit 1172edf

File tree

16 files changed

+607
-44
lines changed

16 files changed

+607
-44
lines changed

lcof2/剑指 Offer II 073. 狒狒吃香蕉/README.md

+114-1
Original file line numberDiff line numberDiff line change
@@ -57,22 +57,135 @@
5757

5858
<!-- 这里可写通用的实现逻辑 -->
5959

60+
二分查找。
61+
6062
<!-- tabs:start -->
6163

6264
### **Python3**
6365

6466
<!-- 这里可写当前语言的特殊实现逻辑 -->
6567

6668
```python
67-
69+
class Solution:
70+
def minEatingSpeed(self, piles: List[int], h: int) -> int:
71+
left, right = 1, max(piles)
72+
while left < right:
73+
mid = (left + right) >> 1
74+
s = sum((pile + mid - 1) // mid for pile in piles)
75+
if s <= h:
76+
right = mid
77+
else:
78+
left = mid + 1
79+
return left
6880
```
6981

7082
### **Java**
7183

7284
<!-- 这里可写当前语言的特殊实现逻辑 -->
7385

7486
```java
87+
class Solution {
88+
public int minEatingSpeed(int[] piles, int h) {
89+
int mx = 0;
90+
for (int pile : piles) {
91+
mx = Math.max(mx, pile);
92+
}
93+
int left = 1, right = mx;
94+
while (left < right) {
95+
int mid = (left + right) >>> 1;
96+
int s = 0;
97+
for (int pile : piles) {
98+
s += (pile + mid - 1) / mid;
99+
}
100+
if (s <= h) {
101+
right = mid;
102+
} else {
103+
left = mid + 1;
104+
}
105+
}
106+
return left;
107+
}
108+
}
109+
```
110+
111+
### **C++**
112+
113+
```cpp
114+
class Solution {
115+
public:
116+
int minEatingSpeed(vector<int>& piles, int h) {
117+
int left = 1, right = *max_element(piles.begin(), piles.end());
118+
while (left < right)
119+
{
120+
int mid = left + right >> 1;
121+
int s = 0;
122+
for (int pile : piles) s += (pile + mid - 1) / mid;
123+
if (s <= h) right = mid;
124+
else left = mid + 1;
125+
}
126+
return left;
127+
}
128+
};
129+
```
130+
131+
### **Go**
132+
133+
```go
134+
func minEatingSpeed(piles []int, h int) int {
135+
mx := 0
136+
for _, pile := range piles {
137+
mx = max(mx, pile)
138+
}
139+
left, right := 1, mx
140+
for left < right {
141+
mid := (left + right) >> 1
142+
s := 0
143+
for _, pile := range piles {
144+
s += (pile + mid - 1) / mid
145+
}
146+
if s <= h {
147+
right = mid
148+
} else {
149+
left = mid + 1
150+
}
151+
}
152+
return left
153+
}
154+
155+
func max(a, b int) int {
156+
if a > b {
157+
return a
158+
}
159+
return b
160+
}
161+
```
75162

163+
### **C#**
164+
165+
```cs
166+
public class Solution {
167+
public int MinEatingSpeed(int[] piles, int h) {
168+
int left = 1, right = piles.Max();
169+
while (left < right)
170+
{
171+
int mid = (left + right) >> 1;
172+
int s = 0;
173+
foreach (int pile in piles)
174+
{
175+
s += (pile + mid - 1) / mid;
176+
}
177+
if (s <= h)
178+
{
179+
right = mid;
180+
}
181+
else
182+
{
183+
left = mid + 1;
184+
}
185+
}
186+
return left;
187+
}
188+
}
76189
```
77190

78191
### **...**
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
class Solution {
2+
public:
3+
int minEatingSpeed(vector<int>& piles, int h) {
4+
int left = 1, right = *max_element(piles.begin(), piles.end());
5+
while (left < right)
6+
{
7+
int mid = left + right >> 1;
8+
int s = 0;
9+
for (int pile : piles) s += (pile + mid - 1) / mid;
10+
if (s <= h) right = mid;
11+
else left = mid + 1;
12+
}
13+
return left;
14+
}
15+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
public class Solution {
2+
public int MinEatingSpeed(int[] piles, int h) {
3+
int left = 1, right = piles.Max();
4+
while (left < right)
5+
{
6+
int mid = (left + right) >> 1;
7+
int s = 0;
8+
foreach (int pile in piles)
9+
{
10+
s += (pile + mid - 1) / mid;
11+
}
12+
if (s <= h)
13+
{
14+
right = mid;
15+
}
16+
else
17+
{
18+
left = mid + 1;
19+
}
20+
}
21+
return left;
22+
}
23+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
func minEatingSpeed(piles []int, h int) int {
2+
mx := 0
3+
for _, pile := range piles {
4+
mx = max(mx, pile)
5+
}
6+
left, right := 1, mx
7+
for left < right {
8+
mid := (left + right) >> 1
9+
s := 0
10+
for _, pile := range piles {
11+
s += (pile + mid - 1) / mid
12+
}
13+
if s <= h {
14+
right = mid
15+
} else {
16+
left = mid + 1
17+
}
18+
}
19+
return left
20+
}
21+
22+
func max(a, b int) int {
23+
if a > b {
24+
return a
25+
}
26+
return b
27+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
class Solution {
2+
public int minEatingSpeed(int[] piles, int h) {
3+
int mx = 0;
4+
for (int pile : piles) {
5+
mx = Math.max(mx, pile);
6+
}
7+
int left = 1, right = mx;
8+
while (left < right) {
9+
int mid = (left + right) >>> 1;
10+
int s = 0;
11+
for (int pile : piles) {
12+
s += (pile + mid - 1) / mid;
13+
}
14+
if (s <= h) {
15+
right = mid;
16+
} else {
17+
left = mid + 1;
18+
}
19+
}
20+
return left;
21+
}
22+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
class Solution:
2+
def minEatingSpeed(self, piles: List[int], h: int) -> int:
3+
left, right = 1, max(piles)
4+
while left < right:
5+
mid = (left + right) >> 1
6+
s = sum([(pile + mid - 1) // mid for pile in piles])
7+
if s <= h:
8+
right = mid
9+
else:
10+
left = mid + 1
11+
return left

solution/0800-0899/0875.Koko Eating Bananas/README.md

+7-15
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ class Solution:
6666
left, right = 1, max(piles)
6767
while left < right:
6868
mid = (left + right) >> 1
69-
s = sum([(pile + mid - 1) // mid for pile in piles])
69+
s = sum((pile + mid - 1) // mid for pile in piles)
7070
if s <= h:
7171
right = mid
7272
else:
@@ -109,22 +109,14 @@ class Solution {
109109
class Solution {
110110
public:
111111
int minEatingSpeed(vector<int>& piles, int h) {
112-
int mx = 0;
113-
for (auto pile : piles) {
114-
mx = max(mx, pile);
115-
}
116-
int left = 1, right = mx;
117-
while (left < right) {
112+
int left = 1, right = *max_element(piles.begin(), piles.end());
113+
while (left < right)
114+
{
118115
int mid = left + right >> 1;
119116
int s = 0;
120-
for (auto pile : piles) {
121-
s += (pile + mid - 1) / mid;
122-
}
123-
if (s <= h) {
124-
right = mid;
125-
} else {
126-
left = mid + 1;
127-
}
117+
for (int pile : piles) s += (pile + mid - 1) / mid;
118+
if (s <= h) right = mid;
119+
else left = mid + 1;
128120
}
129121
return left;
130122
}

solution/0800-0899/0875.Koko Eating Bananas/README_EN.md

+6-14
Original file line numberDiff line numberDiff line change
@@ -99,22 +99,14 @@ class Solution {
9999
class Solution {
100100
public:
101101
int minEatingSpeed(vector<int>& piles, int h) {
102-
int mx = 0;
103-
for (auto pile : piles) {
104-
mx = max(mx, pile);
105-
}
106-
int left = 1, right = mx;
107-
while (left < right) {
102+
int left = 1, right = *max_element(piles.begin(), piles.end());
103+
while (left < right)
104+
{
108105
int mid = left + right >> 1;
109106
int s = 0;
110-
for (auto pile : piles) {
111-
s += (pile + mid - 1) / mid;
112-
}
113-
if (s <= h) {
114-
right = mid;
115-
} else {
116-
left = mid + 1;
117-
}
107+
for (int pile : piles) s += (pile + mid - 1) / mid;
108+
if (s <= h) right = mid;
109+
else left = mid + 1;
118110
}
119111
return left;
120112
}

solution/0800-0899/0875.Koko Eating Bananas/Solution.cpp

+6-14
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,14 @@
11
class Solution {
22
public:
33
int minEatingSpeed(vector<int>& piles, int h) {
4-
int mx = 0;
5-
for (auto pile : piles) {
6-
mx = max(mx, pile);
7-
}
8-
int left = 1, right = mx;
9-
while (left < right) {
4+
int left = 1, right = *max_element(piles.begin(), piles.end());
5+
while (left < right)
6+
{
107
int mid = left + right >> 1;
118
int s = 0;
12-
for (auto pile : piles) {
13-
s += (pile + mid - 1) / mid;
14-
}
15-
if (s <= h) {
16-
right = mid;
17-
} else {
18-
left = mid + 1;
19-
}
9+
for (int pile : piles) s += (pile + mid - 1) / mid;
10+
if (s <= h) right = mid;
11+
else left = mid + 1;
2012
}
2113
return left;
2214
}

0 commit comments

Comments
 (0)