347. Top K Frequent Elements

Given a non-empty array of integers, return the k most frequent elements.

class Solution {
    public int[] topKFrequent(int[] nums, int k) {
        // maxmium heap
        Map<Integer, Integer> memo = new HashMap<>();
        for(int value : nums){
            memo.put(value, memo.getOrDefault(value, 0)+1);
        }
        int[] res = new int[k];
        int index = 0;
        // maxium heap
        Queue<Integer> maxHeap = new PriorityQueue<>((a,b)->memo.get(b)-memo.get(a));
        for(Integer key : memo.keySet()){
            maxHeap.add(key);
            if(maxHeap.size()==memo.size()-k+1){
                res[index++]=maxHeap.poll(); 
            }
        }
        return res;
    }
}

Last updated