【重点】【堆】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;
    }
}
相关推荐
汀、人工智能15 小时前
[特殊字符] 第100课:任务调度器
数据结构·算法·数据库架构·贪心··任务调度器
汀、人工智能3 天前
[特殊字符] 第95课:冗余连接
数据结构·算法·链表·数据库架构··冗余连接
汀、人工智能3 天前
[特殊字符] 第97课:前K个高频元素
数据结构·算法·数据库架构··数据流·前k个高频元素
汀、人工智能3 天前
[特殊字符] 第98课:数据流中位数
数据结构·算法·数据库架构··数据流·数据流中位数
汀、人工智能5 天前
[特殊字符] 第58课:两个正序数组的中位数
数据结构·算法·数据库架构··数据流·两个正序数组的中位数
汀、人工智能6 天前
[特殊字符] 第28课:相交链表
数据结构·算法·链表·数据库架构··相交链表
汀、人工智能7 天前
[特殊字符] 第24课:反转链表
数据结构·算法·链表·数据库架构··反转链表
汀、人工智能7 天前
[特殊字符] 第26课:环形链表
数据结构·算法·链表·数据库架构··环形链表
汀、人工智能7 天前
[特殊字符] 第25课:合并两个有序链表
数据结构·算法·链表·数据库架构··合并两个有序链表
汀、人工智能8 天前
04 - 控制流:if/for/while
数据结构·算法·链表·数据库架构··if/for/while