【发布时间】:2013-09-21 10:44:40
【问题描述】:
我遇到了这个问题:
给定两个数字数组,找出这两个数组中的每一个是否具有相同的整数集。建议一种算法,它可以比
N * log(N)运行得更快而无需额外空间。
这是链接
find-if-two-arrays-contain-the-same-set-of-integers
algorithm-to-tell-if-two-arrays-have-identical-members
但是在阅读了上述链接的所有答案后,我没有找到我遇到的这个简单的答案,这里是......
int main(){
int a[] = {1,5,5,7,5,6,6};
int b[] = {1,6,6,5,7,5,9};
int i = 0;
int size = 0;
int xor_ab = a[0]^b[0];
int sumDiff_ab = (a[0] - b[0]);;
if(sizeof(a)/sizeof(a[0]) == sizeof(b)/sizeof(b[0])){
size = sizeof(a)/sizeof(a[0]);
}else{
printf("not identical : array size differ");
return 0;
}
for(i=1; i < size ; ++i){
xor_ab = xor_ab ^ a[i] ^ b[i];
sumDiff_ab += (a[i] - b[i]);
}
if(xor_ab == 0 && sumDiff_ab == 0){
printf("identical");
}else{
printf("not identical");
}
return 0;
}
现在我想知道,我的解决方案是否适用于所有用例。 如果没有,请让我知道这些用例。
[编辑]
请考虑数组中的所有数字都是 +ve。
[接受的答案]
我接受了@Boris Strandjev 的回答,
我的解决方案不适用于此类情况
{3,5}
{1,7}
【问题讨论】:
-
我看不出异或的意义。数组未排序。