-
Notifications
You must be signed in to change notification settings - Fork 23
/
Copy path1090-largest-values-from-labels.js
41 lines (37 loc) · 1.17 KB
/
1090-largest-values-from-labels.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
/**
* 1090. Largest Values From Labels
* https://leetcode.com/problems/largest-values-from-labels/
* Difficulty: Medium
*
* You are given n item's value and label as two integer arrays values and labels. You are also
* given two integers numWanted and useLimit.
*
* Your task is to find a subset of items with the maximum sum of their values such that:
* - The number of items is at most numWanted.
* - The number of items with the same label is at most useLimit.
*
* Return the maximum sum.
*/
/**
* @param {number[]} values
* @param {number[]} labels
* @param {number} numWanted
* @param {number} useLimit
* @return {number}
*/
var largestValsFromLabels = function(values, labels, numWanted, useLimit) {
const items = values.map((value, index) => ({ value, label: labels[index] }));
items.sort((a, b) => b.value - a.value);
const labelCount = new Map();
let result = 0;
let itemsUsed = 0;
for (const { value, label } of items) {
const currentCount = labelCount.get(label) || 0;
if (itemsUsed < numWanted && currentCount < useLimit) {
result += value;
labelCount.set(label, currentCount + 1);
itemsUsed++;
}
}
return result;
};