📌  相关文章
📜  数组中精确重复 'k' 次的最小元素。(1)

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

数组中精确重复 k 次的最小元素

在一个长度为n的数组中,可能会出现一些元素恰好重复了k次,而其他元素则出现了不到k次或超过了k次。现在要找出所有精确重复了k次的元素中最小的那个。

解法

假设目标元素是x,首先遍历整个数组并进行计数,得出每个元素出现的次数。如果x出现的次数正好为k,我们就可以将其收入考虑范围内;如果x出现的次数小于k,则说明x不可能满足条件,直接跳过;如果x出现的次数大于k,则说明x有多余的元素,也不能满足条件,跳过即可。

在处理完数组中的所有元素后,我们得到了所有出现k次的元素,我们只需要从中找到最小的那一个即可。可以遍历整个数组,只将满足条件的元素中最小的那个记下来,这个元素就是数组中精确重复k次的最小元素了。

代码片段
def minKRepeat(nums, k):
    cnt = {}
    for num in nums:
        cnt[num] = cnt.get(num, 0) + 1
    res = float('inf')
    for num in cnt:
        if cnt[num] == k:
            res = min(res, num)
    return -1 if res == float('inf') else res
复杂度分析

这个算法需要遍历数组2次,所以时间复杂度是O(n),空间复杂度是O(n)。其中,遍历数组查询元素出现次数的操作可以使用哈希表代替,可以将空间复杂度优化到O(k)。