模板题目:Heap( 347 Top K Frequent Elements)

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

下面是我之前的解法:
所谓的Heap就是PQ

public class Solution {
    public List<Integer> topKFrequent(int[] nums, int k) {
        Map<Integer, Integer> map = new HashMap<>();
        for(int n: nums){
            map.put(n, map.getOrDefault(n,0)+1);
        }
           
        PriorityQueue<Map.Entry<Integer, Integer>> maxHeap = 
                         new PriorityQueue<>((a,b)->(b.getValue()-a.getValue()));
        for(Map.Entry<Integer,Integer> entry: map.entrySet()){
            maxHeap.add(entry);
        }
        
        List<Integer> res = new ArrayList<>();
        while(res.size()<k){
            Map.Entry<Integer, Integer> entry = maxHeap.poll();
            res.add(entry.getKey());
        }
        return res;
    }
}

其实这个代码的想法很简单 就是构建频率hashmap,然后构建PQ 把表中的元素放进去 按照频率进行排列,然后再拿出来K个 就行了。

这道题虽然简单 但是无疑给我们提了一个醒:虽然PQ不常用到 但是一定要能想到,别铁憨憨只会Arrays.sort();

posted @ 2020-12-18 01:01  EvanMeetTheWorld  阅读(21)  评论(0)    收藏  举报