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

leetcode热题100.前k个高频元素

作者:晓宜
🌈🌈🌈
个人简介:互联网大厂Java准入职,阿里云专家博主,csdn后端优质创作者,算法爱好者
❤️❤️❤️
你的关注是我前进的动力😊

Problem: 347. 前 K 个高频元素

文章目录

  • 题目
  • 思路
  • Code

题目

给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素。你可以按 任意顺序 返回答案。

示例 1:

输入: nums = [1,1,1,2,2,3], k = 2

输出: [1,2]

示例 2:

输入: nums = [1], k = 1
输出: [1]

提示:

  • 1 < = n u m s . l e n g t h < = 1 0 5 1 <= nums.length <= 10^5 1<=nums.length<=105
  • k 的取值范围是 [1, 数组中不相同的元素的个数]
  • 题目数据保证答案唯一,换句话说,数组中前 k 个高频元素的集合是唯一的

进阶:你所设计算法的时间复杂度 必须 优于 O(n log n) ,其中 n 是数组大小。

思路

首先统计每个元素出现的次数

然后建立一个包含k个元素的最小堆,我们先用循环构建这样一个堆,

如果此时nums中还有元素的话,我们把这个元素和堆顶元素的出现频率做比较,如果当前元素的频率更高,说明我们应该弹出堆中出现频率最小的元素,然后加入这个元素

最后,这个堆的元素就是nums中出现频率前k高的元素了,我们把他们的key重新构造成数组返回

Code

class Solution:def topKFrequent(self, nums: List[int], k: int) -> List[int]:h = []d = defaultdict(int)for x in nums:d[x] += 1for key,v in d.items():if len(h)<k:heappush(h,(v,key))else:if v>h[0][0]:heappop(h)heappush(h,(v,key))return [key for v,key in h]
http://www.lryc.cn/news/331983.html

相关文章:

  • LangChain Demo | Agent X ReAct X wikipedia 询问《三体》的主要内容
  • Revit 2025新功能一览~
  • Head First Design Patterns -代理模式
  • 第十三题:天干地支
  • 8000预算可以购买阿里云服务器配置整理
  • 游戏APP如何提高广告变现收益的同时,保证用户留存率?
  • Linux ulimit命令教程:如何查看和设置系统资源限制(附实例详解和注意事项)
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第5节(封闭类和Final方法)
  • vue3从精通到入门12:vue3的生命周期和组件
  • 力扣热题100_链表_21_合并两个有序链表
  • 探索未来智慧酒店网项目接口架构
  • os模块篇(十三)
  • 【JavaEE初阶系列】——文件操作 IO 之 文件系统操作
  • JAVA 学习·类与方法
  • 4. python练习题4-水仙花数
  • 【Qt 学习笔记】Qt 开发环境的搭建 | Qt 安装教程
  • ids工业相机与电控位移台同步控制及数据采集
  • 景联文科技提供高质量医疗健康AI大模型数据
  • 【Python第三方库】lxml 解析器和xpath路径语言
  • Java(Lambda、集合)、题解
  • Transformer学习: Transformer小模块学习--位置编码,多头自注意力,掩码矩阵
  • easyexcel 动态列导出
  • flink源码编译-job提交
  • Mysql密码修改问题
  • 建独立站,对FP商家有什么好处?
  • 使用Postman进行websocket接口测试
  • Android音视频开发 - MediaMetadataRetriever 相关
  • 注解(Annotation)
  • 蓝桥杯:七步诗 ← bfs
  • Vue 如何快速上手