algorithm - 找到数组中唯一不成对的元素

标签 algorithm

埃森哲面试问题:

你得到了一个大小为 2n+1 的数组,其中有 n 对整数(可以是 +ve -ve0) 和一个不成对的元素。

如何找到不成对的元素?

对表示重复。所以 (3,3) 是一对而 (3,-3) 不是一对。

最佳答案

对所有元素进行异或

这些对将抵消

a XOR a = 0

并且结果将是唯一未配对的元素,如

0 XOR a = a

如果可以破坏数组,您可以对相邻元素进行XOR。完成后,数组的最后一个元素具有未配对的元素:

N = Num of elements in array.
for( i=1 to N )
   arr[i] ^= arr[i-1];    
print arr[N-1]

如果不能销毁数组,可以使用变量来保存结果:

N = Num of elements in array.
Unpaired = arr[0];
for( i=1 to N )
   Unpaired = Unpaired ^ arr[i];    
print Unpaired

C 函数做同样的事情:

int findUnpaired(int *arr,int len) {
 int i;                  // loop counter.
 int unpaired;           // to hold the unpaired element.

 unpaired = arr[0];      // initialize it with the 1st array ele.

 for(i=1;i<len;i++) {    // loop for all remaining elements.
    unpaired ^= arr[i];  // XOR each element with the running XOR.
 }
 return unpaired;        // return result.
}

关于algorithm - 找到数组中唯一不成对的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2644179/

相关文章:

arrays - 使用 O(1) 辅助空间以相同顺序在数组中查找 k 个最小数字的算法

java - 如何在有向图中从特定顶点执行 BFS 或 DFS,其中某些顶点的出度为 0?

algorithm - WAM(沃伦抽象机)中的统一算法示例

从 4 组求和到 0 的算法

javascript - 算法:我怎么不能使用滑动窗口方法来解决这个问题?

performance - 快速任意角度寻路

PHP 字符串中多次出现的单词

algorithm - 归并排序lg(n)+1中递归树的高度怎么来的

c# - 根据层次结构在列表中搜索字符串

java - 在java中测试公式中的括号是否匹配,我的算法是否正确?