当前位置: 首页 > article >正文

栈和队列-前K个高频元素

代码随想录-刷题笔记

347. 前 K 个高频元素 - 力扣(LeetCode)

内容:

该问题也是一个数据结构的特化问题,只要掌握优先级队列-也就是堆的话可以很快的解决问题。

本题我采用大根堆来解决,大根堆就是一个二叉树,自带排序的二叉树,大根堆可以保证根的值是最大的,第二大的是根的左子树,第三大的是根的右子树,以此类推.按照层序遍历的结构来排列大小。

如果想要解决本题,还真需要理明白 ,只要思路清晰 ,跟开发业务一样,基本上没什么难的,一步一步来就可以了

1.使用map 来映射值和出现频率 , k - f 

2.对出现频率进行堆排序

3.取堆排序后的前k个结果.

好了,已经理清楚了,按照这三步可以完美的写出问题

代码:

class Solution {
    public int[] topKFrequent(int[] nums, int k) {
        List<Integer> result = new ArrayList<>();
        Map<Integer,Integer> map = new HashMap<>();
        for(int i = 0 ; i < nums.length ; i++) {
            map.put(nums[i],map.getOrDefault(nums[i],0)+1);
        }
        PriorityQueue<Map.Entry<Integer,Integer>> maxHeap = new PriorityQueue<>((a,b) -> b.getValue()-a.getValue());
        for(Map.Entry<Integer,Integer> entry : map.entrySet()) {
            maxHeap.add(entry);
        }
        for(int i = 0 ; i < k ; i++) {
            Map.Entry<Integer,Integer> val = maxHeap.poll();
            result.add(val.getKey());
        }
        return result.stream().mapToInt(Integer::intValue).toArray();
    }
}

总结:

本题仅作为特化形问题,没有其他什么花里胡哨的算法。只要掌握堆排序和hash的用法可以轻松ac.


http://www.kler.cn/a/555663.html

相关文章:

  • Windows 图形显示驱动开发-上下文监视
  • Leetcode 76 Minimum Window Substring
  • 鸿蒙NEXT开发-应用数据持久化之关系型数据库
  • Microsoft 365 Copilot中使用人数最多的是哪些应用
  • MariaDB 历史版本下载地址 —— 筑梦之路
  • Java多线程深度解析
  • QT项目——天气预报
  • 南凌科技接入deepseek大模型,提升云网智安服务能力
  • CE RED 增加网络安全 添加新网络安全类型
  • [Android]如何判断当前APP是Debug还是Release环境?
  • Java+SpringBoot+Vue+数据可视化的航班购票出行服务平台(程序+论文+讲解+安装+调试+售后)
  • RocketMQ - 常见问题
  • Unity Shader Graph 2D - Procedural程序化图形之夹心圆环
  • 网络设备的数据平面和控制平面
  • HtML之JavaScript BOM编程
  • 机器学习_13 决策树知识总结
  • 玩转Docker | 使用Docker部署本地自托管reference速查表工具
  • LayUi点击查看图片组件layer.photos()用法(图片放大预览后滚动鼠标缩放、底部显示自定义标题)
  • 【大模型系列篇】DeepSeek-R1如何通过强化学习有效提升大型语言模型的推理能力?
  • kafka-保姆级配置说明(producer)