Skip to content

Commit 57ae8cd

Browse files
committed
feat: add solutions to lc problem: No.2335
No.2335.Minimum Amount of Time to Fill Cups
1 parent 10ae25f commit 57ae8cd

File tree

6 files changed

+116
-31
lines changed

6 files changed

+116
-31
lines changed

solution/2300-2399/2335.Minimum Amount of Time to Fill Cups/README.md

Lines changed: 56 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,18 @@
6060

6161
**方法一:贪心 + 排序**
6262

63-
每次贪心地选择其中较大的两个数进行减一操作(最多减为 0),直至所有数变为 0。
63+
我们可以每次贪心地选择其中较大的两个数进行减一操作(最多减为 $0$),直至所有数变为 $0$。
64+
65+
时间复杂度 $O(S)$,空间复杂度 $O(1)$。其中 $S$ 为数组 `amount` 中所有数的和,本题中 $S \leq 300$。
66+
67+
**方法二:贪心 + 分类讨论**
68+
69+
我们可以将数组 `amount` 排序,设 $a$, $b$, $c$ 分别为数组 `amount` 中的三个数,有以下两种情况:
70+
71+
- 如果 $a + b \leq c$,此时我们只需要 $c$ 次操作即可将所有数变为 $0$,因此答案为 $c$。
72+
- 如果 $a + b > c$,每一次操作我们都可以将其中两个数减一,最终匹配完,或者剩下最后一个数(取决于总和是偶数还是奇数),因此答案为 $\left \lfloor \frac{a + b + c + 1}{2} \right \rfloor$。
73+
74+
时间复杂度 $O(1)$,空间复杂度 $O(1)$。
6475

6576
<!-- tabs:start -->
6677

@@ -80,6 +91,15 @@ class Solution:
8091
return ans
8192
```
8293

94+
```python
95+
class Solution:
96+
def fillCups(self, amount: List[int]) -> int:
97+
amount.sort()
98+
if amount[0] + amount[1] <= amount[2]:
99+
return amount[2]
100+
return (sum(amount) + 1) // 2
101+
```
102+
83103
### **Java**
84104

85105
<!-- 这里可写当前语言的特殊实现逻辑 -->
@@ -99,6 +119,18 @@ class Solution {
99119
}
100120
```
101121

122+
```java
123+
class Solution {
124+
public int fillCups(int[] amount) {
125+
Arrays.sort(amount);
126+
if (amount[0] + amount[1] <= amount[2]) {
127+
return amount[2];
128+
}
129+
return (amount[0] + amount[1] + amount[2] + 1) / 2;
130+
}
131+
}
132+
```
133+
102134
### **C++**
103135

104136
```cpp
@@ -117,6 +149,19 @@ public:
117149
};
118150
```
119151
152+
```cpp
153+
class Solution {
154+
public:
155+
int fillCups(vector<int>& amount) {
156+
sort(amount.begin(), amount.end());
157+
if (amount[0] + amount[1] <= amount[2]) {
158+
return amount[2];
159+
}
160+
return (amount[0] + amount[1] + amount[2] + 1) / 2;
161+
}
162+
};
163+
```
164+
120165
### **Go**
121166

122167
```go
@@ -134,6 +179,16 @@ func fillCups(amount []int) int {
134179
}
135180
```
136181

182+
```go
183+
func fillCups(amount []int) int {
184+
sort.Ints(amount)
185+
if amount[0]+amount[1] <= amount[2] {
186+
return amount[2]
187+
}
188+
return (amount[0] + amount[1] + amount[2] + 1) / 2
189+
}
190+
```
191+
137192
### **TypeScript**
138193

139194
```ts

solution/2300-2399/2335.Minimum Amount of Time to Fill Cups/README_EN.md

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,15 @@ class Solution:
7171
return ans
7272
```
7373

74+
```python
75+
class Solution:
76+
def fillCups(self, amount: List[int]) -> int:
77+
amount.sort()
78+
if amount[0] + amount[1] <= amount[2]:
79+
return amount[2]
80+
return (sum(amount) + 1) // 2
81+
```
82+
7483
### **Java**
7584

7685
```java
@@ -88,6 +97,18 @@ class Solution {
8897
}
8998
```
9099

100+
```java
101+
class Solution {
102+
public int fillCups(int[] amount) {
103+
Arrays.sort(amount);
104+
if (amount[0] + amount[1] <= amount[2]) {
105+
return amount[2];
106+
}
107+
return (amount[0] + amount[1] + amount[2] + 1) / 2;
108+
}
109+
}
110+
```
111+
91112
### **C++**
92113

93114
```cpp
@@ -106,6 +127,19 @@ public:
106127
};
107128
```
108129
130+
```cpp
131+
class Solution {
132+
public:
133+
int fillCups(vector<int>& amount) {
134+
sort(amount.begin(), amount.end());
135+
if (amount[0] + amount[1] <= amount[2]) {
136+
return amount[2];
137+
}
138+
return (amount[0] + amount[1] + amount[2] + 1) / 2;
139+
}
140+
};
141+
```
142+
109143
### **Go**
110144

111145
```go
@@ -123,6 +157,16 @@ func fillCups(amount []int) int {
123157
}
124158
```
125159

160+
```go
161+
func fillCups(amount []int) int {
162+
sort.Ints(amount)
163+
if amount[0]+amount[1] <= amount[2] {
164+
return amount[2]
165+
}
166+
return (amount[0] + amount[1] + amount[2] + 1) / 2
167+
}
168+
```
169+
126170
### **TypeScript**
127171

128172
```ts
Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,10 @@
11
class Solution {
22
public:
33
int fillCups(vector<int>& amount) {
4-
int ans = 0;
5-
while (amount[0] + amount[1] + amount[2]) {
6-
sort(amount.begin(), amount.end());
7-
++ans;
8-
amount[2]--;
9-
amount[1] = max(0, amount[1] - 1);
4+
sort(amount.begin(), amount.end());
5+
if (amount[0] + amount[1] <= amount[2]) {
6+
return amount[2];
107
}
11-
return ans;
8+
return (amount[0] + amount[1] + amount[2] + 1) / 2;
129
}
1310
};
Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,7 @@
11
func fillCups(amount []int) int {
2-
ans := 0
3-
for amount[0]+amount[1]+amount[2] > 0 {
4-
sort.Ints(amount)
5-
ans++
6-
amount[2]--
7-
if amount[1] > 0 {
8-
amount[1]--
9-
}
2+
sort.Ints(amount)
3+
if amount[0]+amount[1] <= amount[2] {
4+
return amount[2]
105
}
11-
return ans
6+
return (amount[0] + amount[1] + amount[2] + 1) / 2
127
}
Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,9 @@
11
class Solution {
22
public int fillCups(int[] amount) {
3-
int ans = 0;
4-
while (amount[0] + amount[1] + amount[2] > 0) {
5-
Arrays.sort(amount);
6-
++ans;
7-
amount[2]--;
8-
amount[1] = Math.max(0, amount[1] - 1);
3+
Arrays.sort(amount);
4+
if (amount[0] + amount[1] <= amount[2]) {
5+
return amount[2];
96
}
10-
return ans;
7+
return (amount[0] + amount[1] + amount[2] + 1) / 2;
118
}
129
}
Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,6 @@
11
class Solution:
22
def fillCups(self, amount: List[int]) -> int:
3-
ans = 0
4-
while sum(amount):
5-
amount.sort()
6-
ans += 1
7-
amount[2] -= 1
8-
amount[1] = max(0, amount[1] - 1)
9-
return ans
3+
amount.sort()
4+
if amount[0] + amount[1] <= amount[2]:
5+
return amount[2]
6+
return (sum(amount) + 1) // 2

0 commit comments

Comments
 (0)