使用XOR方法查找数组中缺少的和重复的元素

时间:2018-03-18 08:02:43

标签: java arrays algorithm data-structures linked-list

我正在练习数组的搜索算法。

我遇到了通过对包含1到n整数的给定元素数组使用XOR方法找到缺失和重复元素的问题。 Find the missing and duplicate elements in an array in linear time and constant space 我非常清楚我们如何能够获得X和Y的单独值(一个重复,另一个重复)

然而,我无法理解我们如何能够决定哪一个重复,哪一个重复。

(根据给定的解决方案,我可以看到XOR在列表上的xor结果,其中set-bit给出了缺少的元素,而其他列表给出了重复)。 但是,我无法理解达成这一决定的逻辑。

请帮助我理解这个决定背后的逻辑。

2 个答案:

答案 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。