给定n-1 * n数组,找到缺失的数字

时间:2013-07-12 15:27:08

标签: algorithm data-structures

这里每行包含一个数字的位表示。这些数字来自1..N正好缺少一个数字。找到缺失数字的位表示。
面试官问我这个问题 我说:“我们可以找到给定数字的总和,并从前n个数字的总和中减去它(我们知道为(N *(N + 1))/ 2)” 他说,涉及从基地10改为基地2 你能否给我一个暗示我如何在不改变基础的情况下解决它?

2 个答案:

答案 0 :(得分:9)

您可以将XOR .. 0范围内的所有数字N加在一起,然后XOR数组中的数字。结果将是缺失的数字。

说明: XOR一个数字本身总是会导致零。上面的算法XOR的每个数字恰好是两次,除了缺失的算法。丢失的数字将是XOR - 只有零一次,所以结果将等于缺少的数字。

注意:面试官在需要转换基础以进行添加时是错误的:添加二进制数字很容易也很有趣 - 事实上,计算机一直这样做: - )

答案 1 :(得分:1)

你可以将这些数字混合在一起,并与1..n进行异或。数字以二进制形式存储的事实是一个很好的提示,BTW。

事实上,任何具有逆运算的交换运算符都应该有效,因为如果运算符是可交换的,则顺序无关紧要,因此它可以应用于您拥有的数字和1..n,差别是第一个一个不对数组中没有的数字进行操作。然后你可以使用它的逆来找到那个数字,你有两个结果。 SO +-*/XORXOR以及符合要求的所有其他运营商都应该在这里工作。< / p>

相关问题