【重点】【堆】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;
    }
}
相关推荐
Alfred king2 天前
面试150 IPO
面试·职场和发展·贪心·数组··排序
CS创新实验室1 个月前
CPython 局部变量存储机制:从 “栈上存储“ 看语言实现差异
python···cpython·局部变量
June`2 个月前
深度刨析树结构(从入门到入土讲解AVL树及红黑树的奥秘)
数据结构·c++·二叉树·红黑树·二叉搜索树··avl树
TAMOXL2 个月前
ctf.show pwn入门 堆利用-前置基础 pwn142
pwn·
TAMOXL2 个月前
NSSCTF [NISACTF 2022]ezheap
pwn·
whoarethenext3 个月前
数据结构堆的c/c++的实现
c语言·数据结构·c++·
小徐Chao努力3 个月前
【堆】最大堆、最小堆以及GO语言的实现
数据结构·算法·golang·
sml259(劳改版)4 个月前
数据结构--堆
数据结构·算法·
代码AC不AC4 个月前
【数据结构】堆
c语言·数据结构·学习··深度剖析
ゞ 正在缓冲99%…4 个月前
leetcode295.数据流的中位数
java·数据结构·算法·leetcode·