/ / C ++で2つの配列の2要素を比較する - c ++、配列、関数、compare

C ++で2つの配列の2要素を比較する - c ++、配列、関数、compare

私は2つの配列を持っている各配列は、いくつかの値を持っています:

int a[] =  {1, 2, 3, 4};
int b[] =  {0, 1, 5, 6};

今私は配列の要素を比較する必要があります(a)配列の要素を持つ(b).. 一致するものがあれば、プログラムはエラーを返すか、 "重複した値があるエラー"などを出力する必要があります。 上記の状況では、両方とも同じ値を持つので、エラーcoz a [0] = b [1]を返さなければなりません。

これどうやってするの??

回答:

回答№1の場合は7

配列がこの小さな場合は、私はちょうどブルートフォースのアプローチを行い、両方の配列をループ:

for (int i=0;i<4;++i)
{
for (int j=0;j<4;++j)
{
if (a[i] == b[j])
{
// Return an error, or print "error there is a duplicate value" etc
}
}
}

しかし、大規模な配列を扱う場合は、これがO(n ^ 2)なので、より良いアルゴリズムを検討したいかもしれません。

たとえば、配列の1つがソートされている場合、特に配列の長さが長くなるほど、一致をより迅速に確認することができます。しかし、あなたの配列が常に常にいくつかの要素になる場合は、もっと精巧なもので気にしません。


回答№2の場合は3

両方の配列がソートされていると仮定すると、次のように配列を並べ替えることができます:

// int array1[FIRSTSIZE];
// int array2[SECONDSIZE];
for(int i=0, j=0; i < FIRSTSIZE && j < SECONDSIZE; ){
if(array1[i] == array2[j]){
cout << "DUPLICATE AT POSITION " << i << "," << j << endl;
i++;
j++;
}
else if(array1[i] < array2[j]){
i++;
}
else{
j++;
}
}

線形の複雑さが必要ですが、ソートされた場合にのみ機能します。


答え№3の2

並べ替えられた配列のソリューションは既に掲載されています。配列がソートされていない場合は、配列を作成することができます。 std::set またはハッシュセット)をそれぞれ取り出し、セット互いに素である。おそらく、どのインデックスが重複しているかを知るために、値のインデックスのペアをセットに格納する必要があります(そして、比較演算子を適切にオーバーロードする必要があります)。これはO(n ログ n)複雑さ。


回答№4の場合は0
//v={1,2,3,4};  vector
//v1={1,2,3,4}  vector

bool f=0;
if(equal(v.begin(),v.end(),v1.begin()))  //compare two vector, if equal return true
{
f=1;
}

}
if(f==1)
cout<<"Yes"<<endl;
else cout<<"No"<<endl;

enter code here