【重点】【堆】347.前K个高频元素

题目

最大的K个元素 => 小根堆(类似上窄下宽的梯形)

最小的K个元素 => 大根堆(类似倒三角形)

法1:小根堆

java 复制代码
class Solution {
    public int[] topKFrequent(int[] nums, int k) {
        Map<Integer, Integer> valToCountMap = new HashMap<>();
        for (int i : nums) {
            valToCountMap.put(i, valToCountMap.getOrDefault(i, 0) + 1);
        }
        PriorityQueue<int[]> queue = new PriorityQueue<>((a, b) -> a[1] - b[1]);
        for (Map.Entry<Integer, Integer> entry : valToCountMap.entrySet()) {
            int val = entry.getKey(), count = entry.getValue();
            if (queue.size() == k) {
                if (count > queue.peek()[1]) {
                    queue.poll();
                    queue.offer(new int[]{val, count});
                }
            } else {
                queue.offer(new int[]{val, count});
            }
        }

        int[] res = new int[k];
        for (int i = 0; i < k; ++i) {
            res[i] = queue.poll()[0];
        }

        return res;
    }
}
相关推荐
跳跳的向阳花17 天前
16-02、JVM系列之:内存与垃圾回收篇(二)
jvm·内存··老年代·方法区·新生代
2401_858286111 个月前
102.【C语言】数据结构之用堆对数组排序
c语言·开发语言·数据结构·算法·
极客先躯1 个月前
高级java每日一道面试题-2024年11月24日-JVM篇-说说对象分配规则?
java·jvm···对象分配规则
极客先躯1 个月前
高级java每日一道面试题-2024年11月22日-JVM篇-说说堆和栈的区别?
java·jvm··
2401_858286111 个月前
101.【C语言】数据结构之二叉树的堆实现(顺序结构) 下
c语言·开发语言·数据结构·算法·
Darkwanderor1 个月前
用数组实现小根堆
c语言·数据结构·二叉树·
熬夜学编程的小王2 个月前
【初阶数据结构】实现顺序结构二叉树->堆(附源码)
数据结构·算法·
IT规划师2 个月前
数据结构 - 堆
数据结构·
数据结构和算法2 个月前
数据结构——笛卡尔树详解
数据结构··二叉搜索树··笛卡尔树
hhhcbw2 个月前
C++ STL容器(五) —— priority_queue 底层剖析
java·数据结构·c++·stl··大根堆·小根堆