我正在练习数组的搜索算法。
我遇到了通过对包含1到n整数的给定元素数组使用XOR方法找到缺失和重复元素的问题。 Find the missing and duplicate elements in an array in linear time and constant space 我非常清楚我们如何能够获得X和Y的单独值(一个重复,另一个重复)
然而,我无法理解我们如何能够决定哪一个重复,哪一个重复。
(根据给定的解决方案,我可以看到XOR在列表上的xor结果,其中set-bit给出了缺少的元素,而其他列表给出了重复)。 但是,我无法理解达成这一决定的逻辑。
请帮助我理解这个决定背后的逻辑。
答案 0 :(得分:0)
在执行Xor操作时,如果Xor的偶数倍数为零,而Xor的奇数倍数,那么Xor就是那个数。
偶数频率为5 ^ 5或3 ^ 3 ^ 3 ^ 3的异或为零。 奇数频率5 ^ 5 ^ 5 ^ 5 ^ 5 = 5或3 ^ 3 ^ 3 = 3的异或将是相同的数字。
如果仔细观察,您会发现找到重复项或缺失项都指同一件事。让我们举个例子,了解一下- 因为如果缺少某个数字,则表示该数字的频率将为零,即偶数。 并且如果某个整数重复,则意味着该数字的频率将为2,即偶数,并且每当您对同一数字进行Xor异或运算时,其结果将为零
例如,请考虑dupArray(A)= {1,2,3,5,5},missingArray(B)= {1,2,3,4,_}范围是1到5 实际数组(C)= {1,2,3,4,5}
A ^ C = {5}
B ^ C = {5}
答案 1 :(得分:-1)
如果你找到x&然后再简单地在现有数组中创建一个循环并检查数组中是否存在x,那么缺少的数字是x,否则它将是y。