力扣 LeetCode 347. 前K个高频元素(Day5:栈与队列)

解题思路:

小根堆统计前K个高频元素

注意:

PriorityQueue中需要自定义排序规则

java 复制代码
class Solution {
    public int[] topKFrequent(int[] nums, int k) {
        PriorityQueue<int[]> pq = new PriorityQueue<>((x,y)->x[1]-y[1]);
        Map<Integer,Integer> map=new HashMap<>();
        for(int num:nums){
            map.put(num,map.getOrDefault(num,0)+1);
        }

        for(Map.Entry<Integer,Integer> entry:map.entrySet()){
            if(pq.size()<k) pq.add(new int[]{entry.getKey(),entry.getValue()});
            else{
                if(entry.getValue()>pq.peek()[1]){
                    pq.poll();
                    pq.add(new int[]{entry.getKey(),entry.getValue()});

                }
            }
        }
        
        int[] res=new int[k];
        for(int i=0;i<k;i++){
            res[i]=pq.poll()[0];
        }
        return res;
    }
}
相关推荐
【数据删除】34813 分钟前
计算机复试学习笔记 Day41
笔记·学习·算法
上海锟联科技13 分钟前
什么是DAS分布式光纤声波传感系统?原理与应用解析
数据结构·分布式·算法·分布式光纤传感
篮l球场20 分钟前
LRU 缓存
算法·leetcode
blackicexs21 分钟前
第八周第五天
数据结构·c++·算法
whycthe31 分钟前
c++二叉树详解
数据结构·c++·算法
郝学胜-神的一滴42 分钟前
循环队列深度剖析:从算法原理到C++实现全解析
开发语言·数据结构·c++·算法·leetcode
Via_Neo43 分钟前
接雨水问题 + 输入优化
java·开发语言·算法
plus4s1 小时前
3月13日(进阶5)
算法
x_xbx1 小时前
LeetCode:27. 移除元素
数据结构·算法·leetcode
云泽8081 小时前
C++ map 底层探秘:从结构设计到 operator [] 实现的全解析
数据结构·c++·算法