📜  数据结构|堆|问题2(1)

📅  最后修改于: 2023-12-03 15:40:01.103000             🧑  作者: Mango

数据结构 | 堆 | 问题2

问题描述

有一个整数数组 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)。