python给定一个非空的整数数组,编程返回其中出现频率前k高的元素
时间: 2024-10-21 07:17:34 浏览: 16
python 实现给定两个整数 n 和 k,返回 1 ... n 中所有可能的 k 个数的组合
5星 · 资源好评率100%
在Python中,为了找出一个非空整数数组中出现频率最高的前k个元素,你可以使用`collections.Counter`来计算每个元素的频率,然后使用`heapq`模块中的最小堆来维护频率最高的k个元素。这里是一个简单的步骤:
1. 使用`Counter`计算每个元素的频率。
2. 将计数器的items(键值对列表)转换为元组列表,第一个元素是频率,第二个元素是元素本身。
3. 创建一个最大堆(默认最小元素在堆顶,使用`heapq.nlargest`函数)。
4. 遍历频率统计,每次将频率较高的元素加入堆,并替换堆顶元素(频率较低的)。
5. 当添加了k个元素后,堆中的就是频率最高的k个元素。
以下是相应的代码实现:
```python
import collections
import heapq
def topKFrequent(nums, k):
counter = collections.Counter(nums)
heap = []
for num, freq in counter.most_common():
if len(heap) < k:
heapq.heappush(heap, (-freq, num))
else:
if -heap[0][0] < freq:
heapq.heapreplace(heap, (-freq, num))
return [num for freq, num in heap]
# 示例
nums = [1, 1, 1, 2, 2, 3]
k = 2
print(topKFrequent(nums, k)) # 输出:[1, 2]
阅读全文