我找到了这个答案:Quickest way to find missing number in an array of numbers,当你只有一个号码丢失时这很好。
除了这个问题之外 - 我想知道找到所有缺失数字的最佳(和最快)方法是什么,以及对未排序数组进行排序。 (例如,数组就像链接问题中描述的那样 - 数组大小为100,随机数为1-100,但其中一些缺失)
答案 0 :(得分:5)
显然,这些数字在某个范围内,或者谈论缺失数字是没有意义的。因此,可以应用counting sort。然后通过阵列进行线性扫描以找到孔。或者,您可以扫描排序步骤中的计数以找到缺少的元素。
这一切都在O(n)中运行。
实施例: 下面的数组给出了6,1,7,8,3,4,9,1,10,3。
现在计算每个数字出现在数组中的频率,方法是遍历数组并递增每个遇到数字的计数:
number 1 2 3 4 5 6 7 8 9 10
count 2 0 2 1 0 1 1 1 1 1
您立即看到2和5确实出现了0次,因此丢失了。
计数也可用于提出排序数组:我们需要2次1次,2次3次,1次4次,依此类推。
1 1 3 3 4 6 7 8 9 10