这个问题与How to find a duplicate element in an array of shuffled consecutive integers?非常相似,但有一些额外的要求。
您有一个连续整数的列表,没有特别的顺序。无法保证这些整数的范围或列表中的元素数量。
此列表缺少一个整数,并包含另一个整数的副本。
这样一个列表的一个例子是{16,12,13,17,14,13};在这种情况下,缺少的整数是15,重复的是13。
考虑到小数据集和大数据集,找到这两个数字的最省时的方法是什么?有没有比O(n log n)更好的时间复杂度的解决方案,它不会阻塞小数据集?
答案 0 :(得分:8)
实际上,您可以从引用的主题中应用该想法。但是,由于你有两个变化,你应该测量两件事。
例如,测量值的总和和平方和,并将它们与预期值进行比较。 如果数字A重复且数字B丢失,您将拥有:
有(A-B)和(A ^ 2-B ^ 2)你可以得到(A + B)=(A ^ 2-B ^ 2)/(A-B)。
有(A + B)和(AB)你可以得到A =(A + B)/ 2 +(AB)/ 2和B =(A + B)/ 2-(AB)/ 2