Algorithm 证明XOR不';找不到丢失的号码(面试问题)?
面试问题:你会得到一个大约10亿个唯一数字的文件,每个数字都是32位的数字。查找文件中没有的数字 当我接近这个问题时,我尝试了几个3位和4位数字的例子。对于我尝试的例子,我发现当我对这组数字进行异或运算时,我得到了一个正确的答案:Algorithm 证明XOR不';找不到丢失的号码(面试问题)?,algorithm,bit-manipulation,Algorithm,Bit Manipulation,面试问题:你会得到一个大约10亿个唯一数字的文件,每个数字都是32位的数字。查找文件中没有的数字 当我接近这个问题时,我尝试了几个3位和4位数字的例子。对于我尝试的例子,我发现当我对这组数字进行异或运算时,我得到了一个正确的答案: a = [0,1,2] # missing 3 b = [1,2,3] # missing 0 c = [0,1,2,3,4,5,6] # missing 7 d = [0,1,2,3,5,6,7] # missing 4 functools.reduce((lam
a = [0,1,2] # missing 3
b = [1,2,3] # missing 0
c = [0,1,2,3,4,5,6] # missing 7
d = [0,1,2,3,5,6,7] # missing 4
functools.reduce((lambda x, y: x^y), a) # returns 3
functools.reduce((lambda x, y: x^y), b) # returns 0
functools.reduce((lambda x, y: x^y), c) # returns 7
functools.reduce((lambda x, y: x^y), d) # returns 4
然而,当我编写并提交它时,它没有通过测试用例
我的问题是:在面试环境中,我如何确定或排除这样的方法不是可行的解决方案?在所有示例中,数组正好缺少一个数字。这就是XOR工作的原因。尽量不要使用相同的属性进行测试 对于问题本身,可以通过取每个位的少数来构造一个数字 编辑 XOR对您的示例起作用的原因:
当您对从0到2^n-1的所有数字进行异或运算时,结果为0(每个位中正好有2^(n-1)'1'。因此,如果取一个数字,然后取所有剩余的数字的XOR,结果就是你取的数字,因为取该数字的XOR和所有剩余数字的结果需要为0。假设一个64位系统有超过4gb的可用内存,我会将这些数字读入一个32位整数数组。然后,我将通过数字循环多达32次 类似于一个反向的“智囊团”游戏,我会一点一点地构造一个缺失的数字。在每个循环中,我计算所有匹配位的数字,到目前为止我选择了0或1。然后我加上不经常出现的位。一旦计数为零,我就少了一个数字 示例: 十进制/二进制的数字是
1 = 01
2 = 10
3 = 11
一个数字的最高有效位为0,两个数字的最高有效位为1。因此,我将0作为最高有效位。
在下一轮比赛中,我必须与00和01比赛。这会立即导致00作为缺失的数字
另一种方法是使用随机数生成器。有50%的几率你会发现一个不存在的数字作为第一猜测。反例证明:3^4^5^6=4。不确定“在面试环境中”,但我想你必须想出一个反例。任何长度为1的列表都会失败。哦,哇,是的,这是一个很好的反例。你能详细说明一下“这就是XOR工作的原因”吗?XOR的某些属性是否与一个目标数有关?我感谢您的回答。然而,我并不是在寻找这个问题的解决方案,为了完整性,结合999999996个不同的其他32位数字,选择异或为零。