2021-09-29-前k个高频元素

思路

统计每个元素出现的次数
遍历map,用最小堆保存频率最大的k个元素

代码
class Solution {
    // HashMap<Integer, Integer> map;
    // static Comparator<Integer> cmp = new Comparator<>(){
    //     public int compare(Integer o1, Integer o2){
    //         return map.get(o1)-map.get(o1);
    //     }
    // };
    public List<Integer> topKFrequent(int[] nums, int k) {
        // 统计每个元素出现的次数
        HashMap<Integer,Integer> map = new HashMap();
        for(int num : nums){
            map.put(num, map.getOrDefault(num, 0)+1);
        }
        // 遍历map,用最小堆保存频率最大的k个元素
        Queue<Integer> queue = new PriorityQueue<>(new Comparator<>(){
            @Override
            public int compare(Integer o1, Integer o2){
                return map.get(o1)-map.get(o2);
            }
        });
        for (Integer key: map.keySet()){
            if (queue.size()<k){
                queue.add(key);
            }else{
                queue.add(key);
                queue.poll();
            }
        }
        List<Integer> res = new ArrayList<>();
        while (queue.size()>0){
            res.add(queue.poll());
        }
        return res;
    }
}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容