📜  资质|算术能力2 |问题1(1)

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

资质 | 算术能力2 | 问题1

简介

这道题要求求出一个长度为n的数组中,每个数字m至少出现m次的数字。例如,对于输入[1, 2, 2, 3, 3, 3, 4, 4, 4, 4],输出应为[4, 3]。

算法思路

这道题可以用哈希表来解决。我们首先遍历一遍输入的数组,将每个数字存入哈希表,并统计该数字出现的次数。接下来,我们可以再遍历一遍哈希表,找到每个数字m对应的出现次数n,若n >= m,则将该数字加入结果数组中。最后返回结果。

代码实现

下面是Python代码的实现:

def find_special_numbers(nums: List[int]) -> List[int]:
    counts = {}
    results = []
    for num in nums:
        counts[num] = counts.get(num, 0) + 1
    for num, count in counts.items():
        if count >= num:
            results.append(num)
    return results
复杂度分析

该算法需要两次遍历输入的数组,以及一次遍历哈希表,所以时间复杂度为O(n),其中n为输入数组的长度。空间复杂度为O(n),即哈希表存储的空间。