Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 09c0480

Browse files
feat: add solutions to lc problem: No.3645 (doocs#4639)
No.3645.Maximum Total from Optimal Activation Order
1 parent 2a2c692 commit 09c0480

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)

AltStyle によって変換されたページ (->オリジナル) /