Back to DSA
Top K Frequent Elements
mediumGiven an array of integers and an integer k, identify the k elements that appear most frequently. The result may be returned in any order.
Examples
Example 1:
Input:
nums = [3,3,3,1,1,2], k = 2Output:
[3,1] Example 2:
Input:
nums = [7], k = 1Output:
[7]Hints
import java.util.*;
class Solution {
public int[] topKFrequent(int[] nums, int k) {
Map<Integer, Integer> freq = new HashMap<>();
for (int n : nums) freq.merge(n, 1, Integer::sum);
List<Integer>[] buckets = new List[nums.length + 1];
for (int i = 0; i < buckets.length; i++) buckets[i] = new ArrayList<>();
for (var e : freq.entrySet()) buckets[e.getValue()].add(e.getKey());
int[] result = new int[k];
int idx = 0;
for (int i = buckets.length - 1; i >= 0 && idx < k; i--) {
for (int num : buckets[i]) {
result[idx++] = num;
if (idx == k) break;
}
}
return result;
}
}Time complexity
O(n)Space complexity
O(n)