Skip to content

Commit 3263b8f

Browse files
committed
feat: add solutions to lc problem: No.1710
No.1710.Maximum Units on a Truck
1 parent 08461ba commit 3263b8f

File tree

6 files changed

+210
-2
lines changed

6 files changed

+210
-2
lines changed

solution/1700-1799/1710.Maximum Units on a Truck/README.md

Lines changed: 77 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,22 +52,98 @@
5252

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

55+
**方法一:贪心 + 排序**
56+
57+
根据题意,我们应该选择尽可能多的单元数,因此,我们对 `boxTypes` 按照单元数从大到小的顺序排列。然后遍历从前往后 `boxTypes`,选择至多 `truckSize` 个箱子,累加单元数。
58+
59+
时间复杂度 $O(n\log n)$,其中 $n$ 表示二维数组 `boxTypes` 的长度。
60+
5561
<!-- tabs:start -->
5662

5763
### **Python3**
5864

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

6167
```python
62-
68+
class Solution:
69+
def maximumUnits(self, boxTypes: List[List[int]], truckSize: int) -> int:
70+
boxTypes.sort(key=lambda x: -x[1])
71+
ans = 0
72+
for a, b in boxTypes:
73+
a = min(a, truckSize)
74+
truckSize -= a
75+
ans += a * b
76+
if truckSize == 0:
77+
break
78+
return ans
6379
```
6480

6581
### **Java**
6682

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

6985
```java
86+
class Solution {
87+
public int maximumUnits(int[][] boxTypes, int truckSize) {
88+
Arrays.sort(boxTypes, (a, b) -> b[1] - a[1]);
89+
int ans = 0;
90+
for (var v : boxTypes) {
91+
int a = Math.min(v[0], truckSize);
92+
truckSize -= a;
93+
ans += a * v[1];
94+
if (truckSize == 0) {
95+
break;
96+
}
97+
}
98+
return ans;
99+
}
100+
}
101+
```
102+
103+
### **C++**
104+
105+
```cpp
106+
class Solution {
107+
public:
108+
int maximumUnits(vector<vector<int>>& boxTypes, int truckSize) {
109+
sort(boxTypes.begin(), boxTypes.end(), [](const vector<int>& a, const vector<int>& b) {
110+
return a[1] > b[1];
111+
});
112+
int ans = 0;
113+
for (auto& v : boxTypes) {
114+
int a = min(v[0], truckSize);
115+
truckSize -= a;
116+
ans += a * v[1];
117+
if (!truckSize) break;
118+
}
119+
return ans;
120+
}
121+
};
122+
```
70123
124+
### **Go**
125+
126+
```go
127+
func maximumUnits(boxTypes [][]int, truckSize int) int {
128+
sort.Slice(boxTypes, func(i, j int) bool { return boxTypes[i][1] > boxTypes[j][1] })
129+
ans := 0
130+
for _, v := range boxTypes {
131+
a := min(v[0], truckSize)
132+
truckSize -= a
133+
ans += a * v[1]
134+
if truckSize == 0 {
135+
break
136+
}
137+
}
138+
return ans
139+
}
140+
141+
func min(a, b int) int {
142+
if a < b {
143+
return a
144+
}
145+
return b
146+
}
71147
```
72148

73149
### **...**

solution/1700-1799/1710.Maximum Units on a Truck/README_EN.md

Lines changed: 71 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,13 +52,83 @@ The total number of units will be = (1 * 3) + (2 * 2) + (1 * 1) = 8.
5252
### **Python3**
5353

5454
```python
55-
55+
class Solution:
56+
def maximumUnits(self, boxTypes: List[List[int]], truckSize: int) -> int:
57+
boxTypes.sort(key=lambda x: -x[1])
58+
ans = 0
59+
for a, b in boxTypes:
60+
a = min(a, truckSize)
61+
truckSize -= a
62+
ans += a * b
63+
if truckSize == 0:
64+
break
65+
return ans
5666
```
5767

5868
### **Java**
5969

6070
```java
71+
class Solution {
72+
public int maximumUnits(int[][] boxTypes, int truckSize) {
73+
Arrays.sort(boxTypes, (a, b) -> b[1] - a[1]);
74+
int ans = 0;
75+
for (var v : boxTypes) {
76+
int a = Math.min(v[0], truckSize);
77+
truckSize -= a;
78+
ans += a * v[1];
79+
if (truckSize == 0) {
80+
break;
81+
}
82+
}
83+
return ans;
84+
}
85+
}
86+
```
87+
88+
### **C++**
89+
90+
```cpp
91+
class Solution {
92+
public:
93+
int maximumUnits(vector<vector<int>>& boxTypes, int truckSize) {
94+
sort(boxTypes.begin(), boxTypes.end(), [](const vector<int>& a, const vector<int>& b) {
95+
return a[1] > b[1];
96+
});
97+
int ans = 0;
98+
for (auto& v : boxTypes) {
99+
int a = min(v[0], truckSize);
100+
truckSize -= a;
101+
ans += a * v[1];
102+
if (!truckSize) break;
103+
}
104+
return ans;
105+
}
106+
};
107+
```
61108
109+
### **Go**
110+
111+
```go
112+
func maximumUnits(boxTypes [][]int, truckSize int) int {
113+
sort.Slice(boxTypes, func(i, j int) bool { return boxTypes[i][1] > boxTypes[j][1] })
114+
ans := 0
115+
for _, v := range boxTypes {
116+
a := min(v[0], truckSize)
117+
truckSize -= a
118+
ans += a * v[1]
119+
if truckSize == 0 {
120+
break
121+
}
122+
}
123+
return ans
124+
}
125+
126+
func min(a, b int) int {
127+
if a < b {
128+
return a
129+
}
130+
return b
131+
}
62132
```
63133

64134
### **...**
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
class Solution {
2+
public:
3+
int maximumUnits(vector<vector<int>>& boxTypes, int truckSize) {
4+
sort(boxTypes.begin(), boxTypes.end(), [](const vector<int>& a, const vector<int>& b) {
5+
return a[1] > b[1];
6+
});
7+
int ans = 0;
8+
for (auto& v : boxTypes) {
9+
int a = min(v[0], truckSize);
10+
truckSize -= a;
11+
ans += a * v[1];
12+
if (!truckSize) break;
13+
}
14+
return ans;
15+
}
16+
};
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
func maximumUnits(boxTypes [][]int, truckSize int) int {
2+
sort.Slice(boxTypes, func(i, j int) bool { return boxTypes[i][1] > boxTypes[j][1] })
3+
ans := 0
4+
for _, v := range boxTypes {
5+
a := min(v[0], truckSize)
6+
truckSize -= a
7+
ans += a * v[1]
8+
if truckSize == 0 {
9+
break
10+
}
11+
}
12+
return ans
13+
}
14+
15+
func min(a, b int) int {
16+
if a < b {
17+
return a
18+
}
19+
return b
20+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
class Solution {
2+
public int maximumUnits(int[][] boxTypes, int truckSize) {
3+
Arrays.sort(boxTypes, (a, b) -> b[1] - a[1]);
4+
int ans = 0;
5+
for (var v : boxTypes) {
6+
int a = Math.min(v[0], truckSize);
7+
truckSize -= a;
8+
ans += a * v[1];
9+
if (truckSize == 0) {
10+
break;
11+
}
12+
}
13+
return ans;
14+
}
15+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
class Solution:
2+
def maximumUnits(self, boxTypes: List[List[int]], truckSize: int) -> int:
3+
boxTypes.sort(key=lambda x: -x[1])
4+
ans = 0
5+
for a, b in boxTypes:
6+
a = min(a, truckSize)
7+
truckSize -= a
8+
ans += a * b
9+
if truckSize == 0:
10+
break
11+
return ans

0 commit comments

Comments
 (0)