私はこの問題に遭遇しました:
数値の 2 つの配列が与えられた場合、2 つの配列のそれぞれが同じ整数のセットを持つかどうかを調べます。
N * log(N)
余分なスペースがない場合よりも高速に実行できるアルゴリズムを提案してください。
ここにリンクがあります
アルゴリズム-to-tell-if-2-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}