给定⼀个整数数组和⼀个整数k,请返回其中出现频率前k⾼的元素。可以按任意顺序返回答案。限制:时间复杂度不超过O(nlogn)
时间: 2024-12-12 15:20:24 浏览: 4
python 实现给定两个整数 n 和 k,返回 1 ... n 中所有可能的 k 个数的组合
5星 · 资源好评率100%
这个问题通常被称为“Top K Frequent Elements”或“K最频繁元素”,它是数据结构和算法领域的一个经典问题。给定一个整数数组,你需要找出其中出现频率最高的k个元素。这种情况下,我们通常会利用哈希表(如Python的collections.Counter)来统计每个元素的出现次数,然后使用优先队列(堆)或类似的数据结构来保持前k个最大计数值。
以下是Python的一个简单解决方案:
```python
from collections import Counter
import heapq
def topKFrequent(nums, k):
# 使用Counter计算每个元素的频率
count = Counter(nums)
# 将元素及其频率组成元组,堆顶存储的是频率最小的k个元素
min_heap = []
for num, freq in count.items():
if len(min_heap) < k:
heapq.heappush(min_heap, (-freq, num))
else:
# 如果当前元素频率小于堆顶元素的频率,则替换堆顶元素
if -heapq.heappop(min_heap)[0] > freq:
heapq.heappush(min_heap, (-freq, num))
return [num for freq, num in min_heap]
```
这个算法的时间复杂度是O(n log k),因为我们首先遍历整个数组计算频率,然后对k个最常见的元素构建堆,这一步的插入操作是O(log k)的。所以总体上满足了O(n log n)的要求。
阅读全文