我碰到這個問題就來了N日誌(N)速度快:確定兩套整數是否相同,比
鑑於兩個數字陣列,發現如果每兩個數組中具有相同的一組整數。建議一種算法,其運行速度可以快於
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;
}
Now我想知道,我的解決方案是否適用於所有用例。 如果沒有,請讓我知道這樣的用例。
[編輯]
請考慮所有數字+已經在數組中。
[接受的答案]
我接受@Boris Strandjev的答案,
我的解決方案將爲情況下,像
{3,5}不行
{1 ,7}
我沒有看到xoring的要點。數組不排序。 – Maggie