Clicky

Leetcode 347 "Top K Frequent elements"

January 1, 0001

347. Top K Frequent elements

Result

Runtime: 10 ms, faster than 69.45% of Java online submissions for Top K Frequent Elements.

Memory Usage: 41.8 MB, less than 46.78% of Java online submissions for Top K Frequent Elements.

class Solution {
    public int[] topKFrequent(int[] nums, int k) {
        
        int ans[]= new int[k];

        // (a,b)-> (b[1] - a[1]) is the ordering we want to apply on the queue
        // the ordering is applyed over the second cell of the array which corresponds to the key frequency
        PriorityQueue<int[]> queue = new PriorityQueue<>((a,b)-> (b[1] - a[1]));  
        
        Map<Integer, Integer> map = new HashMap<>();

        for(int i=0; i<nums.length; i++) {
            if(map.containsKey(nums[i]))
                map.put(nums[i], map.get(nums[i]) + 1);
            else
                map.put(nums[i], 1);
        }

        for(int i:map.keySet()){
            // add to the priority queue an array with the key and the key frequency
            queue.offer(new int[] {i,map.get(i)});
        }
        
        for(int i=0; i<k; i++){
            ans[i]= queue.poll()[0];
        }   
        return ans;
        
    }
}