Python前K个高频元素怎么实现
发表于:2025-01-31 作者:千家信息网编辑
千家信息网最后更新 2025年01月31日,本篇内容介绍了"Python前K个高频元素怎么实现"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!题目
千家信息网最后更新 2025年01月31日Python前K个高频元素怎么实现
本篇内容介绍了"Python前K个高频元素怎么实现"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
题目
给定一个非空的整数数组,返回其中出现频率前 k 高的元素。
示例 1:
输入: nums = [1,1,1,2,2,3], k = 2输出: [1,2]
示例 2:
输入: nums = [1], k = 1输出: [1]
提示:
你可以假设给定的 k 总是合理的,且 1 ≤ k ≤ 数组中不相同的元素的个数。
你的算法的时间复杂度必须优于 O(n log n) , n 是数组的大小。
题目数据保证答案唯一,换句话说,数组中前 k 个高频元素的集合是唯一的。
你可以按任意顺序返回答案。
解题思路
思路:堆
首先审题,题目要求给定非空数组,求出频率前 k 高的元素。提示中说明,算法时间复杂度要优于 O(nlogn),又因为只需返回前 k 个频率最高的元素,那么我们借助堆的思路,对于频率 k 之后的不做处理,进而将时间复杂度优化到 O(nlogk)。
那么具体的做法如下:
先用哈希表统计元素出现的次数;
建立一个最小堆,维护最小堆:
当堆中元素数目小于 k,这里直接将元素插入;
若堆中元素数目等于 k 时,这个时候要将新元素出现频率与堆顶元素出现频率进行比较。若新元素出现频率大于堆顶元素,那么弹出,插入新元素。
最终,堆中的 k 个即是要求的答案。
具体代码实现如下(这里直接使用了 heapq 模块)。
from typing import Listclass Solution: def topKFrequent(self, nums: List[int], k: int) -> List[int]: hash_map = {} # 哈希表统计元素出现频率 for num in nums: if num not in hash_map: hash_map[num] = 0 hash_map[num] += 1 # 建立最小堆,存储频率最大的 k 个元素 import heapq pq = [] for key in hash_map: if len(pq) < k: heapq.heappush(pq, (hash_map[key],key)) elif hash_map[key] > pq[0][0]: heapq.heapreplace(pq, (hash_map[key],key)) # 取出最小堆中的元素 res = [] while pq: res.append(pq.pop()[1]) return res# nums = [3,0,1,0]# nums = [4,1,-1,2,-1,2,3]# k = 2# solution = Solution()# print(solution.topKFrequent(nums, k))
"Python前K个高频元素怎么实现"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!
元素
频率
数组
最小
复杂
复杂度
思路
时间
答案
题目
输出
内容
数目
更多
知识
示例
算法
哈希
提示
统计
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
西安汇为网络技术有限公司
服务器如何管理长连接
服务器管理 教学目标
三级网络技术大题视频
linux修改数据库时间
大写转小写数据库
高级软件开发技术培训
服务器诊断卡
智慧医疗网络安全
高德跟百度共用一个服务器
im聊天记录储存数据库
计算机网络技术的纵向职业群
互联网高科技教育
苹果id账号无法连接服务器
全民网络安全宣传法
华为服务器登录ibmc管理
网络技术工程师属于什么
计算机网络技术课程.pdf
软件开发环境有哪些
葫芦岛软件开发制作
c和数据库的书籍
数据库无穷符号是什么意思
怎么更改服务器地址
大悟县网络安全宣传活动
高端服务器价格
上海网络安全待遇
sql两数据库关联查询
腾讯云有台湾服务器吗
广州睿达互联网科技
网络安全宣讲视频下载