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 42 43
| class Solution { private static class Num implements Comparable<Num> { private final int value; private final int label;
public Num(int value, int label) { this.value = value; this.label = label; }
@Override public int compareTo(Num o) { return Integer.compare(o.value, this.value); } }
public int largestValsFromLabels(int[] values, int[] labels, int numWanted, int useLimit) { Num[] nums = new Num[values.length]; for (int i = 0; i < values.length; i++) { nums[i] = new Num(values[i], labels[i]); } Arrays.sort(nums);
int numCount = 0; int sum = 0; Map<Integer, Integer> labelCountMap = new HashMap<>(); for (Num num : nums) { if (numCount == numWanted) { break; } int labelCount = labelCountMap.getOrDefault(num.label, 0); if (labelCount == useLimit) { continue; }
numCount++; sum += num.value; labelCountMap.put(num.label, labelCount + 1); }
return sum; } }
|
References
1090. Largest Values From Labels