algorithm - 找到对整数数组进行异或以产生零的全部方法

标签 algorithm math

如果我们有一个整数数组,那么我们如何找到对它们进行异或以使结果为 0 的方式数。这里,在每一步中,只有一个整数(i)可以减少任意数量,例如d,使得(i-d)>=0。例如,对于整数 11,15,8,我们可以将 11 减少到 7,这样 7^15^8 =0 。类似地,15 可以减少到 3,这样 11^3^8 = 0 和 8 可以减少到 4,这样 11^15^4=0 。因此总共有 3 种方式

我的方法:对于每个整数,继续减少它,并在每一步将其与数组中剩余的整数进行异或,如果结果为 0 ,则中断。检查所有整数并获取总方法。但这是 0(n^2) 。有什么有效的方法可以做到吗? 谢谢。

最佳答案

您可以对数组中的所有整数进行异或,然后在循环中将结果与每个整数进行异或(它将从所有整数中“删除”该整数,因为 x^x 始终为 0)。结果,您将得到其他成员的 XOR,这就是要替换的数字(因为 x^x 始终为 0)。

    int[] a = new int [size];
    //initialize 'a' array
    int[] b = new int [size];
    int all = 0;
    for(int i = 0; i<a.length; i++)
        all=all^a[i];

    for(int i =0; i< size; i++)
        b[i] = all^a[i];

b[i] 中,您将得到需要用 a[i] 替换的数字以获得零。
我编辑了我的答案并尝试了,它有效。这是 O(n)。

关于algorithm - 找到对整数数组进行异或以产生零的全部方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9460758/

相关文章:

algorithm - Ukkonen 算法广义后缀树

algorithm - 有多少二叉树可能满足给定的前序和后序遍历?

algorithm - 以下伪代码的大 O 复杂度是多少?

algorithm - 到达 DAG 中所有节点的最小节点子集

scala - Scala 有好的数学/统计库吗?

python - 查找与已知平面正交的平面

algorithm - 求从可以访问 B 包的 A 机器收集 C 礼物所需的最短时间?

python - 机器学习算法将结果存储在哪里?

java - Java中的Mod产生负数

c++ - boost::operators 混合算术