347. Top K Frequent Elements

Link

Solution

把array中的元素以及出現次數記錄起來成Entry<k,v>, 其中k是元素值,v是出現次數 PriorityQueue去紀錄每個enrty,並以entry value進行降序排列

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

        PriorityQueue<Map.Entry<Integer, Integer>> pq = new PriorityQueue<>((e1,e2)-> e2.getValue()-e1.getValue());

        for(Map.Entry<Integer, Integer> entry : map.entrySet()){
            pq.add(entry);
        }
        
        int[] ret = new int[k];
        for(int i = 0; i < k; i++){
           ret[i] = pq.poll().getKey();
        }
        return ret;
    }

Last updated

Was this helpful?