Skip to content

Commit 8f0866b

Browse files
committed
feat: add solutions to lc problem: No.3645
No.3645.Maximum Total from Optimal Activation Order
1 parent 2a2c692 commit 8f0866b

File tree

7 files changed

+230
-6
lines changed

7 files changed

+230
-6
lines changed

solution/3600-3699/3645.Maximum Total from Optimal Activation Order/README.md

Lines changed: 78 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -225,25 +225,100 @@ edit_url: https://github.com/doocs/leetcode/edit/main/solution/3600-3699/3645.Ma
225225
#### Python3
226226

227227
```python
228-
228+
class Solution:
229+
def maxTotal(self, value: List[int], limit: List[int]) -> int:
230+
g = defaultdict(list)
231+
for v, lim in zip(value, limit):
232+
g[lim].append(v)
233+
ans = 0
234+
for lim, vs in g.items():
235+
vs.sort()
236+
ans += sum(vs[-lim:])
237+
return ans
229238
```
230239

231240
#### Java
232241

233242
```java
234-
243+
class Solution {
244+
public long maxTotal(int[] value, int[] limit) {
245+
Map<Integer, List<Integer>> g = new HashMap<>();
246+
for (int i = 0; i < value.length; ++i) {
247+
g.computeIfAbsent(limit[i], k -> new ArrayList<>()).add(value[i]);
248+
}
249+
long ans = 0;
250+
for (var e : g.entrySet()) {
251+
int lim = e.getKey();
252+
var vs = e.getValue();
253+
vs.sort((a, b) -> b - a);
254+
for (int i = 0; i < Math.min(lim, vs.size()); ++i) {
255+
ans += vs.get(i);
256+
}
257+
}
258+
return ans;
259+
}
260+
}
235261
```
236262

237263
#### C++
238264

239265
```cpp
240-
266+
class Solution {
267+
public:
268+
long long maxTotal(vector<int>& value, vector<int>& limit) {
269+
unordered_map<int, vector<int>> g;
270+
int n = value.size();
271+
for (int i = 0; i < n; ++i) {
272+
g[limit[i]].push_back(value[i]);
273+
}
274+
long long ans = 0;
275+
for (auto& [lim, vs] : g) {
276+
sort(vs.begin(), vs.end(), greater<int>());
277+
for (int i = 0; i < min(lim, (int) vs.size()); ++i) {
278+
ans += vs[i];
279+
}
280+
}
281+
return ans;
282+
}
283+
};
241284
```
242285
243286
#### Go
244287
245288
```go
289+
func maxTotal(value []int, limit []int) (ans int64) {
290+
g := make(map[int][]int)
291+
for i := range value {
292+
g[limit[i]] = append(g[limit[i]], value[i])
293+
}
294+
for lim, vs := range g {
295+
slices.SortFunc(vs, func(a, b int) int { return b - a })
296+
for i := 0; i < min(lim, len(vs)); i++ {
297+
ans += int64(vs[i])
298+
}
299+
}
300+
return
301+
}
302+
```
246303

304+
#### TypeScript
305+
306+
```ts
307+
function maxTotal(value: number[], limit: number[]): number {
308+
const g = new Map<number, number[]>();
309+
for (let i = 0; i < value.length; i++) {
310+
if (!g.has(limit[i])) {
311+
g.set(limit[i], []);
312+
}
313+
g.get(limit[i])!.push(value[i]);
314+
}
315+
let ans = 0;
316+
for (const [lim, vs] of g) {
317+
vs.sort((a, b) => b - a);
318+
ans += vs.slice(0, lim).reduce((acc, v) => acc + v, 0);
319+
}
320+
return ans;
321+
}
247322
```
248323

249324
<!-- tabs:end -->

solution/3600-3699/3645.Maximum Total from Optimal Activation Order/README_EN.md

Lines changed: 78 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -223,25 +223,100 @@ edit_url: https://github.com/doocs/leetcode/edit/main/solution/3600-3699/3645.Ma
223223
#### Python3
224224

225225
```python
226-
226+
class Solution:
227+
def maxTotal(self, value: List[int], limit: List[int]) -> int:
228+
g = defaultdict(list)
229+
for v, lim in zip(value, limit):
230+
g[lim].append(v)
231+
ans = 0
232+
for lim, vs in g.items():
233+
vs.sort()
234+
ans += sum(vs[-lim:])
235+
return ans
227236
```
228237

229238
#### Java
230239

231240
```java
232-
241+
class Solution {
242+
public long maxTotal(int[] value, int[] limit) {
243+
Map<Integer, List<Integer>> g = new HashMap<>();
244+
for (int i = 0; i < value.length; ++i) {
245+
g.computeIfAbsent(limit[i], k -> new ArrayList<>()).add(value[i]);
246+
}
247+
long ans = 0;
248+
for (var e : g.entrySet()) {
249+
int lim = e.getKey();
250+
var vs = e.getValue();
251+
vs.sort((a, b) -> b - a);
252+
for (int i = 0; i < Math.min(lim, vs.size()); ++i) {
253+
ans += vs.get(i);
254+
}
255+
}
256+
return ans;
257+
}
258+
}
233259
```
234260

235261
#### C++
236262

237263
```cpp
238-
264+
class Solution {
265+
public:
266+
long long maxTotal(vector<int>& value, vector<int>& limit) {
267+
unordered_map<int, vector<int>> g;
268+
int n = value.size();
269+
for (int i = 0; i < n; ++i) {
270+
g[limit[i]].push_back(value[i]);
271+
}
272+
long long ans = 0;
273+
for (auto& [lim, vs] : g) {
274+
sort(vs.begin(), vs.end(), greater<int>());
275+
for (int i = 0; i < min(lim, (int) vs.size()); ++i) {
276+
ans += vs[i];
277+
}
278+
}
279+
return ans;
280+
}
281+
};
239282
```
240283
241284
#### Go
242285
243286
```go
287+
func maxTotal(value []int, limit []int) (ans int64) {
288+
g := make(map[int][]int)
289+
for i := range value {
290+
g[limit[i]] = append(g[limit[i]], value[i])
291+
}
292+
for lim, vs := range g {
293+
slices.SortFunc(vs, func(a, b int) int { return b - a })
294+
for i := 0; i < min(lim, len(vs)); i++ {
295+
ans += int64(vs[i])
296+
}
297+
}
298+
return
299+
}
300+
```
244301

302+
#### TypeScript
303+
304+
```ts
305+
function maxTotal(value: number[], limit: number[]): number {
306+
const g = new Map<number, number[]>();
307+
for (let i = 0; i < value.length; i++) {
308+
if (!g.has(limit[i])) {
309+
g.set(limit[i], []);
310+
}
311+
g.get(limit[i])!.push(value[i]);
312+
}
313+
let ans = 0;
314+
for (const [lim, vs] of g) {
315+
vs.sort((a, b) => b - a);
316+
ans += vs.slice(0, lim).reduce((acc, v) => acc + v, 0);
317+
}
318+
return ans;
319+
}
245320
```
246321

247322
<!-- tabs:end -->
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
class Solution {
2+
public:
3+
long long maxTotal(vector<int>& value, vector<int>& limit) {
4+
unordered_map<int, vector<int>> g;
5+
int n = value.size();
6+
for (int i = 0; i < n; ++i) {
7+
g[limit[i]].push_back(value[i]);
8+
}
9+
long long ans = 0;
10+
for (auto& [lim, vs] : g) {
11+
sort(vs.begin(), vs.end(), greater<int>());
12+
for (int i = 0; i < min(lim, (int) vs.size()); ++i) {
13+
ans += vs[i];
14+
}
15+
}
16+
return ans;
17+
}
18+
};
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
func maxTotal(value []int, limit []int) (ans int64) {
2+
g := make(map[int][]int)
3+
for i := range value {
4+
g[limit[i]] = append(g[limit[i]], value[i])
5+
}
6+
for lim, vs := range g {
7+
slices.SortFunc(vs, func(a, b int) int { return b - a })
8+
for i := 0; i < min(lim, len(vs)); i++ {
9+
ans += int64(vs[i])
10+
}
11+
}
12+
return
13+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
class Solution {
2+
public long maxTotal(int[] value, int[] limit) {
3+
Map<Integer, List<Integer>> g = new HashMap<>();
4+
for (int i = 0; i < value.length; ++i) {
5+
g.computeIfAbsent(limit[i], k -> new ArrayList<>()).add(value[i]);
6+
}
7+
long ans = 0;
8+
for (var e : g.entrySet()) {
9+
int lim = e.getKey();
10+
var vs = e.getValue();
11+
vs.sort((a, b) -> b - a);
12+
for (int i = 0; i < Math.min(lim, vs.size()); ++i) {
13+
ans += vs.get(i);
14+
}
15+
}
16+
return ans;
17+
}
18+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
class Solution:
2+
def maxTotal(self, value: List[int], limit: List[int]) -> int:
3+
g = defaultdict(list)
4+
for v, lim in zip(value, limit):
5+
g[lim].append(v)
6+
ans = 0
7+
for lim, vs in g.items():
8+
vs.sort()
9+
ans += sum(vs[-lim:])
10+
return ans
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
function maxTotal(value: number[], limit: number[]): number {
2+
const g = new Map<number, number[]>();
3+
for (let i = 0; i < value.length; i++) {
4+
if (!g.has(limit[i])) {
5+
g.set(limit[i], []);
6+
}
7+
g.get(limit[i])!.push(value[i]);
8+
}
9+
let ans = 0;
10+
for (const [lim, vs] of g) {
11+
vs.sort((a, b) => b - a);
12+
ans += vs.slice(0, lim).reduce((acc, v) => acc + v, 0);
13+
}
14+
return ans;
15+
}

0 commit comments

Comments
 (0)