347.Top K Frequent Elements

1 - HashTable + BucketSort O(n)

class Solution {
    public List<Integer> topKFrequent(int[] nums, int k) {
        Map<Integer, Integer> map = new HashMap<>();
        int n = nums.length;
        for(int i = 0; i < n; i++){
            map.put(nums[i], map.getOrDefault(nums[i], 0) + 1);
        }

        // corner case: if there is only one number in nums, we need the bucket has index 1.
        List<Integer>[] bucket = new List[n + 1];

        for(Integer i : map.keySet()){
            int freq = map.get(i);
            if(bucket[freq] == null){
                bucket[freq] = new ArrayList<>();
            }
            bucket[freq].add(i);
        }
        List<Integer> res = new ArrayList<>();
        for(int i = n; i > 0 && k > 0; i--){
            if(bucket[i] != null){
                res.addAll(bucket[i]);
                k -= bucket[i].size();
            }
        }
        return res;
    }
}

results matching ""

    No results matching ""