📅  最后修改于: 2023-12-03 15:25:49.792000             🧑  作者: Mango
在日常开发中,我们经常会遇到需要在一个集合中找出出现频率最高的 k 个元素的需求。本文将介绍一种时间复杂度线性的算法来解决这个问题。
给定一个长度为 n 的数组,找出出现频率最高的 k 个元素。
本算法的核心思想是使用一个高效的桶排序算法来统计每个数字的出现频率,然后排序找出出现频率最高的 k 个元素。
具体实现过程如下:
这个算法的时间复杂度为 O(n+klogk),空间复杂度为 O(n+k)。
下面是基于 Python 语言实现的代码片段:
def topKFrequent(nums: List[int], k: int) -> List[int]:
freq = [0] * (len(nums) + 1)
for num in nums:
freq[num] += 1
heap = []
for i in range(1, len(freq)):
if len(heap) == k:
if freq[i] > heap[0][0]:
heapq.heappop(heap)
heapq.heappush(heap, (freq[i], i))
else:
heapq.heappush(heap, (freq[i], i))
result = []
for i in range(k):
result.append(heapq.heappop(heap)[1])
return result[::-1]
本文介绍了一种时间复杂度线性的算法来解决在一个集合中找出出现频率最高的 k 个元素的问题。这个算法的核心思想是使用桶排序算法统计每个数字的出现频率,然后使用堆排序算法找出前 k 个出现频率最高的元素。这个算法的时间复杂度为 O(n+klogk),空间复杂度为 O(n+k)。在实际开发中,可以根据具体需要选用合适的编程语言和数据结构来实现这个算法。