347. 前 K 个高频元素
发布人:shili8
发布时间:2025-03-12 20:20
阅读次数:0
**前 K 个高频元素**
在数据分析中,了解数据中的高频元素是非常重要的。高频元素通常指的是出现次数较多的元素或值。在本文中,我们将讨论如何找到前 K 个高频元素。
**问题描述**
假设我们有一个列表 `nums`,其中包含一些数字。我们的任务是找出前 K 个高频元素。
**示例**
例如,如果 `nums = [1,2,2,3,3,3,4,4,4,4]`,我们希望找到前2 个高频元素,即 `2` 和 `4`。
**解决方案**
我们可以使用 Python 的 `Counter` 类来实现这个功能。`Counter` 是一个字典,它将元素作为键,并且其值为该元素出现的次数。
from collections import Counterdef top_k_frequent(nums, k): # 使用 Counter 计算每个元素出现的次数 count = Counter(nums) # 将元素和出现次数存储在列表中 items = list(count.items()) # 根据出现次数排序列表 items.sort(key=lambda x: x[1], reverse=True) # 返回前 K 个高频元素 return [x[0] for x in items[:k]] # 测试nums = [1,2,2,3,3,3,4,4,4,4] print(top_k_frequent(nums,2)) # 输出: [2,4]
**注释**
* `Counter` 类是 Python 的一个内置类,它可以帮助我们快速计算元素出现的次数。
* 我们使用 `list(count.items())` 将 `Counter` 转换为列表,这样我们就可以对其进行排序。
* `items.sort(key=lambda x: x[1], reverse=True)` 根据出现次数对列表进行排序,出现次数较多的元素排在前面。
* 最后,我们使用列表解析式 `[x[0] for x in items[:k]]` 返回前 K 个高频元素。
**时间复杂度**
该算法的时间复杂度为 O(n log n),其中 n 是列表 `nums` 的长度。这是因为我们需要对列表进行排序,而排序的时间复杂度为 O(n log n)。
**空间复杂度**
该算法的空间复杂度为 O(n),这是因为我们需要存储每个元素出现的次数。