Skip to content

Commit 6565496

Browse files
committed
feat: add solutions to lc problem: No.1833
No.1833.Maximum Ice Cream Bars
1 parent 3c6853f commit 6565496

File tree

7 files changed

+127
-71
lines changed

7 files changed

+127
-71
lines changed

solution/1800-1899/1833.Maximum Ice Cream Bars/README.md

+48-22
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,13 @@
5252

5353
<!-- 这里可写通用的实现逻辑 -->
5454

55-
注意数据范围,题目很容易误导我们使用 01 背包(会超时),其实这题就是简单贪心,优先选择定价小的雪糕。
55+
**方法一:贪心 + 排序**
56+
57+
要买尽可能多的雪糕,且可以按任意顺序购买,因此,我们应该优先选择定价小的雪糕。
58+
59+
对数组 `costs` 进行排序,然后从定价最小的雪糕开始,依次购买,直到不能购买为止,返回能购买的雪糕数量。
60+
61+
时间复杂度 $O(n \times \log n)$,空间复杂度 $O(\log n)$。其中 $n$ 是数组 `costs` 的长度。
5662

5763
<!-- tabs:start -->
5864

@@ -64,14 +70,11 @@
6470
class Solution:
6571
def maxIceCream(self, costs: List[int], coins: int) -> int:
6672
costs.sort()
67-
ans = 0
68-
for c in costs:
73+
for i, c in enumerate(costs):
6974
if coins < c:
70-
break
71-
else:
72-
ans += 1
73-
coins -= c
74-
return ans
75+
return i
76+
coins -= c
77+
return len(costs)
7578
```
7679

7780
### **Java**
@@ -82,12 +85,14 @@ class Solution:
8285
class Solution {
8386
public int maxIceCream(int[] costs, int coins) {
8487
Arrays.sort(costs);
85-
int ans = 0, n = costs.length;
86-
for (int i = 0; i < n && coins >= costs[i]; i++) {
87-
ans++;
88+
int n = costs.length;
89+
for (int i = 0; i < n; ++i) {
90+
if (coins < costs[i]) {
91+
return i;
92+
}
8893
coins -= costs[i];
8994
}
90-
return ans;
95+
return n;
9196
}
9297
}
9398
```
@@ -99,12 +104,12 @@ class Solution {
99104
public:
100105
int maxIceCream(vector<int>& costs, int coins) {
101106
sort(costs.begin(), costs.end());
102-
int ans = 0;
103-
for (int i = 0; i < costs.size() && coins >= costs[i]; ++i) {
104-
++ans;
107+
int n = costs.size();
108+
for (int i = 0; i < n; ++i) {
109+
if (coins < costs[i]) return i;
105110
coins -= costs[i];
106111
}
107-
return ans;
112+
return n;
108113
}
109114
};
110115
```
@@ -114,16 +119,37 @@ public:
114119
```go
115120
func maxIceCream(costs []int, coins int) int {
116121
sort.Ints(costs)
117-
n := len(costs)
118-
ans := 0
119-
for i := 0; i < n && coins >= costs[i]; i++ {
120-
ans++
121-
coins -= costs[i]
122+
for i, c := range costs {
123+
if coins < c {
124+
return i
125+
}
126+
coins -= c
122127
}
123-
return ans
128+
return len(costs)
124129
}
125130
```
126131

132+
### **JavaScript**
133+
134+
```js
135+
/**
136+
* @param {number[]} costs
137+
* @param {number} coins
138+
* @return {number}
139+
*/
140+
var maxIceCream = function (costs, coins) {
141+
costs.sort((a, b) => a - b);
142+
const n = costs.length;
143+
for (let i = 0; i < n; ++i) {
144+
if (coins < costs[i]) {
145+
return i;
146+
}
147+
coins -= costs[i];
148+
}
149+
return n;
150+
};
151+
```
152+
127153
### **...**
128154

129155
```

solution/1800-1899/1833.Maximum Ice Cream Bars/README_EN.md

+41-26
Original file line numberDiff line numberDiff line change
@@ -55,15 +55,10 @@
5555
<p><strong>Constraints:</strong></p>
5656

5757
<ul>
58-
5958
<li><code>costs.length == n</code></li>
60-
6159
<li><code>1 &lt;= n &lt;= 10<sup>5</sup></code></li>
62-
6360
<li><code>1 &lt;= costs[i] &lt;= 10<sup>5</sup></code></li>
64-
6561
<li><code>1 &lt;= coins &lt;= 10<sup>8</sup></code></li>
66-
6762
</ul>
6863

6964
## Solutions
@@ -78,14 +73,11 @@ Pay attention to the data range. The question can easily mislead us to use the 0
7873
class Solution:
7974
def maxIceCream(self, costs: List[int], coins: int) -> int:
8075
costs.sort()
81-
ans = 0
82-
for c in costs:
76+
for i, c in enumerate(costs):
8377
if coins < c:
84-
break
85-
else:
86-
ans += 1
87-
coins -= c
88-
return ans
78+
return i
79+
coins -= c
80+
return len(costs)
8981
```
9082

9183
### **Java**
@@ -94,12 +86,14 @@ class Solution:
9486
class Solution {
9587
public int maxIceCream(int[] costs, int coins) {
9688
Arrays.sort(costs);
97-
int ans = 0, n = costs.length;
98-
for (int i = 0; i < n && coins >= costs[i]; i++) {
99-
ans++;
89+
int n = costs.length;
90+
for (int i = 0; i < n; ++i) {
91+
if (coins < costs[i]) {
92+
return i;
93+
}
10094
coins -= costs[i];
10195
}
102-
return ans;
96+
return n;
10397
}
10498
}
10599
```
@@ -111,12 +105,12 @@ class Solution {
111105
public:
112106
int maxIceCream(vector<int>& costs, int coins) {
113107
sort(costs.begin(), costs.end());
114-
int ans = 0;
115-
for (int i = 0; i < costs.size() && coins >= costs[i]; ++i) {
116-
++ans;
108+
int n = costs.size();
109+
for (int i = 0; i < n; ++i) {
110+
if (coins < costs[i]) return i;
117111
coins -= costs[i];
118112
}
119-
return ans;
113+
return n;
120114
}
121115
};
122116
```
@@ -126,16 +120,37 @@ public:
126120
```go
127121
func maxIceCream(costs []int, coins int) int {
128122
sort.Ints(costs)
129-
n := len(costs)
130-
ans := 0
131-
for i := 0; i < n && coins >= costs[i]; i++ {
132-
ans++
133-
coins -= costs[i]
123+
for i, c := range costs {
124+
if coins < c {
125+
return i
126+
}
127+
coins -= c
134128
}
135-
return ans
129+
return len(costs)
136130
}
137131
```
138132

133+
### **JavaScript**
134+
135+
```js
136+
/**
137+
* @param {number[]} costs
138+
* @param {number} coins
139+
* @return {number}
140+
*/
141+
var maxIceCream = function (costs, coins) {
142+
costs.sort((a, b) => a - b);
143+
const n = costs.length;
144+
for (let i = 0; i < n; ++i) {
145+
if (coins < costs[i]) {
146+
return i;
147+
}
148+
coins -= costs[i];
149+
}
150+
return n;
151+
};
152+
```
153+
139154
### **...**
140155

141156
```

solution/1800-1899/1833.Maximum Ice Cream Bars/Solution.cpp

+4-4
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@ class Solution {
22
public:
33
int maxIceCream(vector<int>& costs, int coins) {
44
sort(costs.begin(), costs.end());
5-
int ans = 0;
6-
for (int i = 0; i < costs.size() && coins >= costs[i]; ++i) {
7-
++ans;
5+
int n = costs.size();
6+
for (int i = 0; i < n; ++i) {
7+
if (coins < costs[i]) return i;
88
coins -= costs[i];
99
}
10-
return ans;
10+
return n;
1111
}
1212
};
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
func maxIceCream(costs []int, coins int) int {
22
sort.Ints(costs)
3-
n := len(costs)
4-
ans := 0
5-
for i := 0; i < n && coins >= costs[i]; i++ {
6-
ans++
7-
coins -= costs[i]
3+
for i, c := range costs {
4+
if coins < c {
5+
return i
6+
}
7+
coins -= c
88
}
9-
return ans
10-
}
9+
return len(costs)
10+
}
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
class Solution {
22
public int maxIceCream(int[] costs, int coins) {
33
Arrays.sort(costs);
4-
int ans = 0, n = costs.length;
5-
for (int i = 0; i < n && coins >= costs[i]; i++) {
6-
ans++;
4+
int n = costs.length;
5+
for (int i = 0; i < n; ++i) {
6+
if (coins < costs[i]) {
7+
return i;
8+
}
79
coins -= costs[i];
810
}
9-
return ans;
11+
return n;
1012
}
11-
}
13+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
/**
2+
* @param {number[]} costs
3+
* @param {number} coins
4+
* @return {number}
5+
*/
6+
var maxIceCream = function (costs, coins) {
7+
costs.sort((a, b) => a - b);
8+
const n = costs.length;
9+
for (let i = 0; i < n; ++i) {
10+
if (coins < costs[i]) {
11+
return i;
12+
}
13+
coins -= costs[i];
14+
}
15+
return n;
16+
};
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,8 @@
11
class Solution:
22
def maxIceCream(self, costs: List[int], coins: int) -> int:
33
costs.sort()
4-
ans = 0
5-
for c in costs:
4+
for i, c in enumerate(costs):
65
if coins < c:
7-
break
8-
else:
9-
ans += 1
10-
coins -= c
11-
return ans
6+
return i
7+
coins -= c
8+
return len(costs)

0 commit comments

Comments
 (0)