有一个10,000的数组.它以随机顺序存储数字1到10,000.
每个号码只出现一次.
现在,如果从该数组中删除任何数字,并将任何其他数字复制到数组中.
我们如何确定哪个数字是重复的,最小的复杂性?
注意:我们不能使用另一个阵列.
计算元素的总和和平方和(对于平方和,您将需要64位值).从这些中你可以恢复哪个元素被修改:
减去未修改数组的预期值.如果x被移除并且y重复,则得到差的y - x和y 2 - x 2 =(y + x)(y - x)的平方和.从那以后很容易恢复x和y.
编辑:请注意,这可能比pigeonhole排序更快,因为它在阵列上线性运行,因此更加缓存友好.