Top K Frequent Elements
LeetCode https://leetcode.cn/problems/top-k-frequent-elements/
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
class Solution {
public int[] topKFrequent(int[] nums, int k) {
Map<Integer, Integer> freq = new HashMap<>();
for (int num : nums) {
freq.put(num, freq.getOrDefault(num, 0) + 1);
}
Queue<Map.Entry<Integer, Integer>> minHeap = new PriorityQueue<>(
(e1, e2) -> e1.getValue() - e2.getValue()
);
for (Map.Entry<Integer, Integer> entry : freq.entrySet()) {
if (minHeap.size() < k) {
minHeap.offer(entry);
} else {
if (entry.getValue() > minHeap.peek().getValue()) {
minHeap.poll();
minHeap.offer(entry);
}
}
} // end for loop
int[] res = new int[k];
for (int i = 0; i < k; i++) {
res[i] = minHeap.poll().getKey();
}
return res;
}
}
Complexity
- Time = O(nlogk)
- Space = O(n)
This post is licensed under CC BY 4.0 by the author.