Back to DSA

Top K Frequent Elements

medium
Acceptance: 50%
HeapHash TableSorting

Given 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 = 2
Output:[3,1]
Example 2:
Input:nums = [7], k = 1
Output:[7]

Hints

00:00
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 complexityO(n)
Space complexityO(n)