私は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