Skip to content

Commit c3e4043

Browse files
committed
feat: update solutions to lc problem: No.1710
No.1710.Maximum Units on a Truck
1 parent d019c94 commit c3e4043

File tree

10 files changed

+63
-76
lines changed

10 files changed

+63
-76
lines changed

solution/0800-0899/0805.Split Array With Same Average/README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ $$
8686

8787
我们可以使用二进制枚举的方法,先枚举左半部分所有子数组的和,如果存在一个子数组和为 $0$,直接返回 `true`,否则我们将其存入哈希表 `vis` 中;然后枚举右半部分所有子数组的和,如果存在一个子数组和为 $0$,直接返回 `true`,否则我们判断此时哈希表 `vis` 中是否存在该和的相反数,如果存在,直接返回 `true`
8888

89-
需要注意的是,我们不能同时全选左半部分和右半部分,因为这样会导致子数组 $B$ 为空,这是不符合题意的。
89+
需要注意的是,我们不能同时全选左半部分和右半部分,因为这样会导致子数组 $B$ 为空,这是不符合题意的。在实现上,我们只需要考虑数组的 $n-1$ 个数。
9090

9191
时间复杂度 $O(n\times 2^{\frac{n}{2}})$,空间复杂度 $O(2^{\frac{n}{2}})$。
9292

@@ -173,7 +173,7 @@ public:
173173
int n = nums.size();
174174
if (n == 1) return false;
175175
int s = accumulate(nums.begin(), nums.end(), 0);
176-
for (int i = 0; i < n; ++i) nums[i] = nums[i] * n - s;
176+
for (int& v : nums) v = v * n - s;
177177
int m = n >> 1;
178178
unordered_set<int> vis;
179179
for (int i = 1; i < 1 << m; ++i) {

solution/0800-0899/0805.Split Array With Same Average/README_EN.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@ public:
117117
int n = nums.size();
118118
if (n == 1) return false;
119119
int s = accumulate(nums.begin(), nums.end(), 0);
120-
for (int i = 0; i < n; ++i) nums[i] = nums[i] * n - s;
120+
for (int& v : nums) v = v * n - s;
121121
int m = n >> 1;
122122
unordered_set<int> vis;
123123
for (int i = 1; i < 1 << m; ++i) {

solution/0800-0899/0805.Split Array With Same Average/Solution.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ class Solution {
44
int n = nums.size();
55
if (n == 1) return false;
66
int s = accumulate(nums.begin(), nums.end(), 0);
7-
for (int i = 0; i < n; ++i) nums[i] = nums[i] * n - s;
7+
for (int& v : nums) v = v * n - s;
88
int m = n >> 1;
99
unordered_set<int> vis;
1010
for (int i = 1; i < 1 << m; ++i) {

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

Lines changed: 22 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -54,9 +54,11 @@
5454

5555
**方法一:贪心 + 排序**
5656

57-
根据题意,我们应该选择尽可能多的单元数,因此,我们对 `boxTypes` 按照单元数从大到小的顺序排列。然后遍历从前往后 `boxTypes`,选择至多 `truckSize` 个箱子,累加单元数
57+
根据题意,我们应该选择尽可能多的单元数,因此,我们先对 `boxTypes` 按照单元数从大到小的顺序排列。
5858

59-
时间复杂度 $O(n\log n)$,其中 $n$ 表示二维数组 `boxTypes` 的长度。
59+
然后从前往后遍历 `boxTypes`,选择最多 `truckSize` 个箱子,累加单元数。
60+
61+
时间复杂度 $O(n\times \log n)$,其中 $n$ 表示二维数组 `boxTypes` 的长度。
6062

6163
<!-- tabs:start -->
6264

@@ -67,13 +69,11 @@
6769
```python
6870
class Solution:
6971
def maximumUnits(self, boxTypes: List[List[int]], truckSize: int) -> int:
70-
boxTypes.sort(key=lambda x: -x[1])
7172
ans = 0
72-
for a, b in boxTypes:
73-
a = min(a, truckSize)
73+
for a, b in sorted(boxTypes, key=lambda x: -x[1]):
74+
ans += b * min(truckSize, a)
7475
truckSize -= a
75-
ans += a * b
76-
if truckSize == 0:
76+
if truckSize <= 0:
7777
break
7878
return ans
7979
```
@@ -87,11 +87,11 @@ class Solution {
8787
public int maximumUnits(int[][] boxTypes, int truckSize) {
8888
Arrays.sort(boxTypes, (a, b) -> b[1] - a[1]);
8989
int ans = 0;
90-
for (var v : boxTypes) {
91-
int a = Math.min(v[0], truckSize);
90+
for (var e : boxTypes) {
91+
int a = e[0], b = e[1];
92+
ans += b * Math.min(truckSize, a);
9293
truckSize -= a;
93-
ans += a * v[1];
94-
if (truckSize == 0) {
94+
if (truckSize <= 0) {
9595
break;
9696
}
9797
}
@@ -106,15 +106,13 @@ class Solution {
106106
class Solution {
107107
public:
108108
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-
});
109+
sort(boxTypes.begin(), boxTypes.end(), [](auto& a, auto& b) { return a[1] > b[1]; });
112110
int ans = 0;
113-
for (auto& v : boxTypes) {
114-
int a = min(v[0], truckSize);
111+
for (auto& e : boxTypes) {
112+
int a = e[0], b = e[1];
113+
ans += b * min(truckSize, a);
115114
truckSize -= a;
116-
ans += a * v[1];
117-
if (!truckSize) break;
115+
if (truckSize <= 0) break;
118116
}
119117
return ans;
120118
}
@@ -124,18 +122,17 @@ public:
124122
### **Go**
125123
126124
```go
127-
func maximumUnits(boxTypes [][]int, truckSize int) int {
125+
func maximumUnits(boxTypes [][]int, truckSize int) (ans int) {
128126
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)
127+
for _, e := range boxTypes {
128+
a, b := e[0], e[1]
129+
ans += b * min(truckSize, a)
132130
truckSize -= a
133-
ans += a * v[1]
134-
if truckSize == 0 {
131+
if truckSize <= 0 {
135132
break
136133
}
137134
}
138-
return ans
135+
return
139136
}
140137
141138
func min(a, b int) int {

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

Lines changed: 18 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -54,13 +54,11 @@ The total number of units will be = (1 * 3) + (2 * 2) + (1 * 1) = 8.
5454
```python
5555
class Solution:
5656
def maximumUnits(self, boxTypes: List[List[int]], truckSize: int) -> int:
57-
boxTypes.sort(key=lambda x: -x[1])
5857
ans = 0
59-
for a, b in boxTypes:
60-
a = min(a, truckSize)
58+
for a, b in sorted(boxTypes, key=lambda x: -x[1]):
59+
ans += b * min(truckSize, a)
6160
truckSize -= a
62-
ans += a * b
63-
if truckSize == 0:
61+
if truckSize <= 0:
6462
break
6563
return ans
6664
```
@@ -72,11 +70,11 @@ class Solution {
7270
public int maximumUnits(int[][] boxTypes, int truckSize) {
7371
Arrays.sort(boxTypes, (a, b) -> b[1] - a[1]);
7472
int ans = 0;
75-
for (var v : boxTypes) {
76-
int a = Math.min(v[0], truckSize);
73+
for (var e : boxTypes) {
74+
int a = e[0], b = e[1];
75+
ans += b * Math.min(truckSize, a);
7776
truckSize -= a;
78-
ans += a * v[1];
79-
if (truckSize == 0) {
77+
if (truckSize <= 0) {
8078
break;
8179
}
8280
}
@@ -91,15 +89,13 @@ class Solution {
9189
class Solution {
9290
public:
9391
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-
});
92+
sort(boxTypes.begin(), boxTypes.end(), [](auto& a, auto& b) { return a[1] > b[1]; });
9793
int ans = 0;
98-
for (auto& v : boxTypes) {
99-
int a = min(v[0], truckSize);
94+
for (auto& e : boxTypes) {
95+
int a = e[0], b = e[1];
96+
ans += b * min(truckSize, a);
10097
truckSize -= a;
101-
ans += a * v[1];
102-
if (!truckSize) break;
98+
if (truckSize <= 0) break;
10399
}
104100
return ans;
105101
}
@@ -109,18 +105,17 @@ public:
109105
### **Go**
110106
111107
```go
112-
func maximumUnits(boxTypes [][]int, truckSize int) int {
108+
func maximumUnits(boxTypes [][]int, truckSize int) (ans int) {
113109
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)
110+
for _, e := range boxTypes {
111+
a, b := e[0], e[1]
112+
ans += b * min(truckSize, a)
117113
truckSize -= a
118-
ans += a * v[1]
119-
if truckSize == 0 {
114+
if truckSize <= 0 {
120115
break
121116
}
122117
}
123-
return ans
118+
return
124119
}
125120
126121
func min(a, b int) int {

solution/1700-1799/1710.Maximum Units on a Truck/Solution.cpp

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,13 @@
11
class Solution {
22
public:
33
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-
});
4+
sort(boxTypes.begin(), boxTypes.end(), [](auto& a, auto& b) { return a[1] > b[1]; });
75
int ans = 0;
8-
for (auto& v : boxTypes) {
9-
int a = min(v[0], truckSize);
6+
for (auto& e : boxTypes) {
7+
int a = e[0], b = e[1];
8+
ans += b * min(truckSize, a);
109
truckSize -= a;
11-
ans += a * v[1];
12-
if (!truckSize) break;
10+
if (truckSize <= 0) break;
1311
}
1412
return ans;
1513
}

solution/1700-1799/1710.Maximum Units on a Truck/Solution.go

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,14 @@
1-
func maximumUnits(boxTypes [][]int, truckSize int) int {
1+
func maximumUnits(boxTypes [][]int, truckSize int) (ans int) {
22
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)
3+
for _, e := range boxTypes {
4+
a, b := e[0], e[1]
5+
ans += b * min(truckSize, a)
66
truckSize -= a
7-
ans += a * v[1]
8-
if truckSize == 0 {
7+
if truckSize <= 0 {
98
break
109
}
1110
}
12-
return ans
11+
return
1312
}
1413

1514
func min(a, b int) int {

solution/1700-1799/1710.Maximum Units on a Truck/Solution.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@ class Solution {
22
public int maximumUnits(int[][] boxTypes, int truckSize) {
33
Arrays.sort(boxTypes, (a, b) -> b[1] - a[1]);
44
int ans = 0;
5-
for (var v : boxTypes) {
6-
int a = Math.min(v[0], truckSize);
5+
for (var e : boxTypes) {
6+
int a = e[0], b = e[1];
7+
ans += b * Math.min(truckSize, a);
78
truckSize -= a;
8-
ans += a * v[1];
9-
if (truckSize == 0) {
9+
if (truckSize <= 0) {
1010
break;
1111
}
1212
}
Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,9 @@
11
class Solution:
22
def maximumUnits(self, boxTypes: List[List[int]], truckSize: int) -> int:
3-
boxTypes.sort(key=lambda x: -x[1])
43
ans = 0
5-
for a, b in boxTypes:
6-
a = min(a, truckSize)
4+
for a, b in sorted(boxTypes, key=lambda x: -x[1]):
5+
ans += b * min(truckSize, a)
76
truckSize -= a
8-
ans += a * b
9-
if truckSize == 0:
7+
if truckSize <= 0:
108
break
119
return ans

solution/2400-2499/2468.Split Message Based on Limit/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@
6363

6464
因此,所有分段剩余可填充的字符数为 $limit\times k - (sa + sb + sc)$,如果该值大于等于 $n$ 则说明可以将字符串划分成 $k$ 段,直接构造答案返回即可。
6565

66-
时间复杂度 $O(n)$,其中 $n$ 为字符串 `message` 的长度。忽略答案的空间消耗,空间复杂度 $O(1)$。
66+
时间复杂度 $O(n\times \log n)$,其中 $n$ 为字符串 `message` 的长度。忽略答案的空间消耗,空间复杂度 $O(1)$。
6767

6868
<!-- tabs:start -->
6969

0 commit comments

Comments
 (0)