📌  相关文章
📜  查找范围内的不同数字的计数(1)

📅  最后修改于: 2023-12-03 14:55:36.210000             🧑  作者: Mango

查找范围内的不同数字的计数

在编程中,我们经常需要查找一段区间内不同数字的个数。比如,给定一个整数数组,我们需要统计其中有多少个不同的数字。这个问题的实现方法有很多,下面介绍几种常用的方法。

方法一:使用哈希表

哈希表是一种高效的数据结构,可以在 O(1) 时间内完成查找、插入和删除操作。我们可以使用一个哈希表来保存数组中出现的每一个数字,然后统计哈希表中不同数字的个数即可。

def count_different_numbers(arr):
    s = set()
    for num in arr:
        s.add(num)
    return len(s)

上面的代码使用了 Python 中的 set 类型,它底层实现就是一个哈希表。这个方法的时间复杂度为 O(n),空间复杂度为 O(n)。

方法二:使用排序

将数组排序后,只需要统计相邻两个数字不同的个数即可。这个方法的时间复杂度为 O(nlogn),空间复杂度为 O(1)。

def count_different_numbers(arr):
    arr.sort()
    cnt = 0
    for i in range(1, len(arr)):
        if arr[i] != arr[i-1]:
            cnt += 1
    return cnt + 1

其中,最后的 cnt + 1 是因为需要加上最后一个数字。

方法三:使用集合

Python 中的 set 类型可以自动去重,并且支持集合运算,非常方便。我们可以将数组转换成一个集合,然后直接返回集合的长度即可。这个方法的时间复杂度为 O(n),空间复杂度为 O(n)。

def count_different_numbers(arr):
    s = set(arr)
    return len(s)

这个方法的代码非常简短,但是需要注意空间复杂度。

以上三种方法都可以有效地解决这个问题,选择哪一种方法主要依靠具体场景和数据规模。在数据较小时,可以使用方法一或三;在数据较大时,方法二可能更为高效。