📅  最后修改于: 2023-12-03 15:28:46.120000             🧑  作者: Mango
题目来源:GATE-IT-2004
有一个长度为 $N$ 的整型数组,每个元素的值在 $0$ 到 $N-1$ 的范围内。数组中有些元素是重复的,但有些是缺失的。请写一个函数以找出数组中第一个缺失的数字。
例如,输入为 $arr[] ={2, 3, 4, 5, 6, 7, 8}$,则输出为 $0$。而输入为 $arr[] = {0, 1, 2, 3, 4, 5, 6, 7}$,则输出为 $8$。
在题目中给出的数组中,每个元素的值在 $0$ 到 $N-1$ 的范围内,也就是说,通过对数组元素进行排序以后,应该有 $i=arr[i]$,否则我们就发现了缺失的数字。
算法的解决思路如下:
对数组进行排序。
对于每个元素,检查其值是否与其下标相等。
如果在某个位置发现了不相等的值,则该位置上的元素值就是缺失的数字。
时间复杂度为 $O(NlogN)$。
def findMissingNumber(arr):
# 1. 数组排序
arr.sort()
# 2. 检查元素值是否与其下标相等
for i in range(len(arr)):
if i != arr[i]:
return i
# 3. 如果没有找到不相等的元素,则缺失的数字是 N
return len(arr)
该算法的时间复杂度为 $O(NlogN)$,并且需要对原数组排序。如果不想对原数组进行修改,则需要对其进行复制并排序。