返回
纵览347题:前K个高频元素的奥妙
前端
2023-10-08 15:51:54
高频元素的定义
在计算机科学领域,“高频元素”是指在给定数据集或序列中出现次数最多的元素。高频元素分析是一种常见的数据挖掘技术,广泛应用于各种场景,如:
- 文本分析:识别文本中最常见的单词或短语,以便进行关键词提取、主题建模和情感分析。
- 网络分析:确定网站或在线社区中最活跃或最受欢迎的用户,以进行用户行为分析和个性化推荐。
- 金融分析:发现股票市场或外汇市场中交易最频繁的资产,以进行投资决策和风险管理。
LeetCode 347题概述
LeetCode 347题给定一个整数数组 nums 和一个整数 k ,要求我们找出其中出现频率前 k 高的元素。挑战在于,我们并不知道最终答案是什么,而且我们不能对原数组进行任何修改,即只能遍历原数组一次来完成任务。
哈希表
哈希表是一种重要的数据结构,常用于快速地查找和插入数据。哈希表的基本原理是将数据项映射到一个哈希值,然后将数据项存储在哈希值对应的存储空间中。当需要查找某个数据项时,只需要计算出它的哈希值,然后直接访问哈希值对应的存储空间即可。哈希表是一种非常高效的数据结构,它的查找和插入时间复杂度都为 O(1)。
优先队列
优先队列是一种特殊的队列,它根据元素的优先级进行排序。优先队列中的元素总是按优先级从高到低排列。当我们需要从优先队列中取出一个元素时,总是会取出优先级最高的那个元素。优先队列通常使用堆数据结构来实现。堆是一种完全二叉树,其中每个节点的键值都大于或等于其子节点的键值。优先队列的查找和插入时间复杂度都是 O(log n),其中 n 是优先队列中的元素个数。
解决LeetCode 347题
我们可以使用哈希表来统计每个元素出现的次数,然后使用优先队列来找出出现频率前 k 高的元素。具体步骤如下:
- 使用哈希表统计每个元素出现的次数。
- 将哈希表中的元素及其对应的出现次数插入优先队列中。
- 从优先队列中取出前 k 个元素,即出现频率前 k 高的元素。
示例代码
def top_k_frequent(nums, k):
# 使用哈希表统计每个元素出现的次数
freq = {}
for num in nums:
if num not in freq:
freq[num] = 0
freq[num] += 1
# 将哈希表中的元素及其对应的出现次数插入优先队列中
pq = []
for num, count in freq.items():
pq.append((count, num))
pq.sort(reverse=True)
# 从优先队列中取出前k个元素,即出现频率前k高的元素
top_k = []
for i in range(k):
top_k.append(pq[i][1])
return top_k
nums = [1, 1, 1, 2, 2, 3]
k = 2
print(top_k_frequent(nums, k))
输出结果:
[1, 2]