【重点】【堆】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;
    }
}
相关推荐
庞轩px5 天前
第二篇:内存——你的变量到底存在哪
内存···缓存命中率·变量生命周期·字符串常量
W.W.H.7 天前
嵌入式栈堆管理与内存分配详解
内存管理···rtos·heap·stack
qeen8714 天前
【数据结构】建堆的时间复杂度讨论与TOP-K问题
c语言·数据结构·c++·学习·
深邃-14 天前
【数据结构与算法】-二叉树(2):实现顺序结构二叉树(堆的实现),向上调整算法,向下调整算法,堆排序,TOP-K问题
数据结构·算法·二叉树·排序算法·堆排序··top-k
qeen8716 天前
【数据结构】二叉树基本概念及堆的C语言模拟实现
c语言·数据结构·c++·
雪碧聊技术19 天前
Native关键字、程序计数器、方法区
·程序计数器·方法区·native关键字
小辉同志21 天前
215. 数组中的第K个最大元素
数据结构·算法·leetcode··快速选择
YuanDaima20481 个月前
堆(优先队列)基础原理与题目说明
linux·运维·服务器·人工智能·python··代码
im_AMBER1 个月前
Leetcode 158 数组中的第K个最大元素 | 查找和最小的 K 对数字
javascript·数据结构·算法·leetcode·
汀、人工智能1 个月前
[特殊字符] 第100课:任务调度器
数据结构·算法·数据库架构·贪心··任务调度器