【重点】【堆】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;
    }
}
相关推荐
Lzc77412 小时前
堆+堆排序+topK问题
数据结构·
CH13hh10 天前
常回家看看之house of kiwi
pwn·ctf··house
橘子真甜~15 天前
6.1.数据结构-c/c++堆详解下篇(堆排序,TopK问题)
c语言·数据结构·c++·算法·面试·
朱皮皮呀19 天前
数据结构-堆
数据结构·算法·二叉树··
zhoupenghui16820 天前
数据结构-树
数据结构·二叉树···完全二叉树
蜡笔-小欣2 个月前
【数据结构】优先级队列(堆)
java·数据结构·学习·
做个爱笑的大男孩2 个月前
数据结构——堆,堆排序
数据结构·算法·堆排序·
Ray-国2 个月前
Leetcode2542-最大子序列的分数
java·数据结构·算法·
闻缺陷则喜何志丹2 个月前
【贪心 堆 优先队列】502. IPO
数据结构·c++·力扣·优先队列·贪心··ipo
Moon也爱算法呀3 个月前
左式堆(数据结构篇)
数据结构·