📅  最后修改于: 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)
这个方法的代码非常简短,但是需要注意空间复杂度。
以上三种方法都可以有效地解决这个问题,选择哪一种方法主要依靠具体场景和数据规模。在数据较小时,可以使用方法一或三;在数据较大时,方法二可能更为高效。