找到未排序数组中所有缺失数字的最快方法是什么

时间:2016-06-16 12:21:37

标签: java arrays algorithm sorting

我找到了这个答案:Quickest way to find missing number in an array of numbers,当你只有一个号码丢失时这很好。

除了这个问题之外 - 我想知道找到所有缺失数字的最佳(和最快)方法是什么,以及对未排序数组进行排序。 (例如,数组就像链接问题中描述的那样 - 数组大小为100,随机数为1-100,但其中一些缺失)

1 个答案:

答案 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