📅  最后修改于: 2023-12-03 15:42:13.747000             🧑  作者: Mango
这道题目测试程序员在排序算法中的知识和理解。下面是该问题的描述以及要求的算法和实现。
给定 $n$ 个数字,其中 $0 ≤ a[i] ≤ n−1$,找到并打印出重复的数字。分析时间和空间复杂度,并给出至少两种不同方法。
def find_duplicates_1(arr):
arr.sort() # 排序
i = 0
while i < len(arr)-1:
if arr[i] == arr[i+1]:
print("重复数字:", arr[i])
i += 1
def find_duplicates_2(arr):
counter = [0] * (len(arr)+1)
for num in arr:
counter[num] += 1
if counter[num] > 1:
print("重复数字:", num)
以上两种算法都可以找到重复数字,但是它们的时间和空间复杂度略有不同。排序算法的时间复杂度更高,但是空间复杂度更低,这适合于处理大规模数据。计数器算法的时间复杂度更低,但是空间复杂度更高,这适合于处理较小规模数据。在实际项目中,我们需要综合考虑算法的时间和空间复杂度,选择最优的算法。