Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

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‎

Lines changed: 114 additions & 1 deletion
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
### **...**
Lines changed: 15 additions & 0 deletions
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+
};
Lines changed: 23 additions & 0 deletions
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+
}
Lines changed: 27 additions & 0 deletions
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+
}
Lines changed: 22 additions & 0 deletions
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+
}
Lines changed: 11 additions & 0 deletions
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‎

Lines changed: 7 additions & 15 deletions
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‎

Lines changed: 6 additions & 14 deletions
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‎

Lines changed: 6 additions & 14 deletions
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)

AltStyle によって変換されたページ (->オリジナル) /