Skip to content

Commit 1751940

Browse files
committed
Add top k frequent elements solution
1 parent 8104900 commit 1751940

File tree

1 file changed

+37
-0
lines changed

1 file changed

+37
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package java1.algorithms.heap;
2+
3+
import java.util.*;
4+
5+
public class TopKFrequentElements {
6+
// TC: O(n logk) SC: O(n)
7+
private int[] topKFrequent(int[] nums, int k){
8+
int[] topElements = new int[k];
9+
HashMap<Integer, Integer> freqMap = new HashMap<>();
10+
for(int num: nums){
11+
freqMap.put(num, freqMap.getOrDefault(num, 0) +1);
12+
}
13+
14+
PriorityQueue<Map.Entry<Integer, Integer>> queue = new PriorityQueue<>(
15+
(a, b) -> a.getValue()-b.getValue()
16+
);
17+
18+
for(Map.Entry<Integer, Integer> it: freqMap.entrySet()){
19+
queue.add(it);
20+
if(queue.size() > k) queue.poll();
21+
}
22+
23+
int i = k;
24+
while (!queue.isEmpty()) {
25+
topElements[--i] = queue.poll().getKey();
26+
}
27+
28+
return topElements;
29+
}
30+
31+
public static void main(String[] args) {
32+
int[] nums = {1,1,1,2,2,3};
33+
int k = 2;
34+
TopKFrequentElements elements = new TopKFrequentElements();
35+
System.out.println(Arrays.toString(elements.topKFrequent(nums, k)));
36+
}
37+
}

0 commit comments

Comments
 (0)