2
public int largestValsFromLabels(int[] values, int[] labels, int numWanted, int useLimit) {3
PriorityQueue<Pair<Integer, Integer>> maxHeap =4
new PriorityQueue<>((a, b) -> Integer.compare(b.getKey(), a.getKey()));5
for (int i = 0; i < values.length; i++) {6
maxHeap.add(new Pair<Integer, Integer>(values[i], labels[i]));8
Map<Integer, Integer> labelLimitMap = new HashMap<>();10
while (numWanted != 0) {11
int label = maxHeap.peek().getValue();12
if (labelLimitMap.containsKey(label)) {13
if (labelLimitMap.get(label) == useLimit) {16
labelLimitMap.put(label, labelLimitMap.get(label) + 1);17
sum += maxHeap.poll().getKey();21
labelLimitMap.put(label, 1);22
sum += maxHeap.poll().getKey();25
// This Holds since at most numWanted is mentioned.26
if (maxHeap.isEmpty()) {