Skip to content

Commit 592ad0e

Browse files
authored
Update Top K Frequent Elements.java
1 parent 43446fd commit 592ad0e

File tree

1 file changed

+14
-13
lines changed

1 file changed

+14
-13
lines changed

Medium/Top K Frequent Elements.java

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -4,21 +4,22 @@ public int[] topKFrequent(int[] nums, int k) {
44
for (int num : nums) {
55
map.put(num, map.getOrDefault(num, 0) + 1);
66
}
7-
PriorityQueue<Integer> pq = new PriorityQueue<>(new Comparator<Integer>(){
8-
public int compare(Integer p1, Integer p2) {
9-
return map.get(p1) - map.get(p2);
10-
}
11-
});
7+
Map<Integer, List<Integer>> frequencyToValueMap = new HashMap<>();
128
for (Integer key : map.keySet()) {
13-
pq.add(key);
14-
if (pq.size() > k) {
15-
pq.poll();
16-
}
9+
frequencyToValueMap.computeIfAbsent(map.get(key), j -> new ArrayList<>()).add(key);
1710
}
18-
int[] ans = new int[k];
19-
for (int i = 0; i < k; i++) {
20-
ans[i] = pq.poll();
11+
List<Integer> result = new ArrayList<>();
12+
for (int i = nums.length; i >= 0 && result.size() < k; i--) {
13+
List<Integer> values = frequencyToValueMap.getOrDefault(i, new ArrayList<>());
14+
if (result.size() + values.size() <= k) {
15+
result.addAll(values);
16+
} else {
17+
int idx = 0;
18+
while (result.size() < k) {
19+
result.add(values.get(idx++));
20+
}
21+
}
2122
}
22-
return ans;
23+
return result.stream().mapToInt(i -> i).toArray();
2324
}
2425
}

0 commit comments

Comments
 (0)