📅  最后修改于: 2023-12-03 15:40:01.103000             🧑  作者: Mango
有一个整数数组 nums
,以及一个整数 k
。请设计算法,找到 nums
中至少出现 k
次的元素中最小的那个。
可以使用最小堆来解决这个问题。我们可以先遍历一遍数组,统计所有元素的出现次数,然后把出现次数大于等于 k
的元素,都加入到一个最小堆中。最小堆中的元素就是出现次数大于等于 k
的元素,我们只需要找到堆中最小的那个元素即可。
import heapq
def least_k(nums, k):
count = {}
for num in nums:
count[num] = count.get(num, 0) + 1
heap = []
for num, cnt in count.items():
if cnt >= k:
heapq.heappush(heap, num)
return heapq.heappop(heap)
如果我们使用 Python 提供的字典数据结构来统计元素出现次数,时间复杂度为 O(n)。然后我们需要把出现次数大于等于 k
的元素加入到最小堆中,这个操作的时间复杂度为 O(nlogk),最后我们还需要弹出堆中最小的元素,时间复杂度为 O(logk)。所以总的时间复杂度为 O(nlogk)。