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

标签 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 over list 的 xor 结果,其中有 set-bit 给出了缺失的元素,而其他列表给出了重复的元素)。 但是,我无法理解达成此决定的逻辑。

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

最佳答案

在进行异或运算时,如果数字出现偶数次,则异或为零,如果出现奇数次,则异或为该数。

偶数 5^5 或 3^3^3^3 的异或将为零。 奇数的异或 5^5^5^5^5=5 或 3^3^3=3 将是相同的数字。

如果仔细观察,您会发现找到重复项或同时缺少两者指的是同一件事。让我们举个例子来理解- 因为如果缺少某个数字,则意味着该数字的频率将为零,即偶数。 如果某个整数是重复的,则意味着该数字的频率将为偶数两次,每当您对同一数字进行偶数次 Xor 时,它都会导致零

Ex-考虑 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}

关于java - 使用 XOR 方法查找数组中缺失和重复的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49345741/

相关文章:

javascript - 使用 JavaScript,我如何执行将返回多个值的二进制搜索?

c++ - 从给定模型获取所有构建订单。

java - 如何防止开发人员使用有风险的方法

java - 如何合并两个具有相同键的嵌套映射并保留值

javascript - 需要用数组中右侧元素的最大值替换元素

c - C 中将 malloc 的 2d 数组修改为 3d 数组的函数

javascript - React 映射多个数组

algorithm - 使用预言机有效地对整数进行质因数分解

java - 如何用始终在最上面的对话框结束 Swing 程序?

java - 在 Java 中如何重置 While 循环而不破坏它?