/ Porovnať 2 prvky dvoch polí v C ++ - c ++, poliach, funkciach, porovnať

Porovnať 2 prvky dvoch polí v C ++ - c ++, poliach, funkciach, porovnať

Mám dve polia pre každé pole majú napríklad niektoré hodnoty:

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

teraz musím porovnať prvky tohto poľa(a) s prvkami v poli (b). ak existuje nejaká zhoda, program by mal vrátiť chybu alebo tlačiť "chyba tam je duplicitná hodnota" atď .. vo vyššie uvedenej situácii by mala vrátiť chybu coz a [0] = b [1], pretože obe majú rovnaké hodnoty.

Ako to môžem urobiť?

odpovede:

7 pre odpoveď č. 1

Ak sú tieto sústavy malé, tak by som len robil priblíženie k brutálnej sile a prerušil obidve polia:

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
}
}
}

Ak sa chystáte zaoberať sa veľkými políčkami, možno budete chcieť zvážiť lepší algoritmus, pretože to je O (n ^ 2).

Ak je napríklad niektorá z vašich políčok triedená,môžete skontrolovať zápasy rýchlejšie, najmä ak sa dĺžka poľa (-ov) zväčší. Nechcel by som nič viac komplikovaný, keby vaše matice vždy mali vždy len niekoľko prvkov.


3 pre odpoveď č. 2

Za predpokladu, že sú obidve polia zoradené, môžete ich vykrojiť, hoci takto:

// 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++;
}
}

Toto by malo mať lineárnu zložitosť, ale funguje iba vtedy, ak sa "zoradí.


2 pre odpoveď č. 3

Riešenie pre triedené polia už bolo odoslané. Ak pole nie sú zoradené, môžete vytvoriť súbor (napr. std::set alebo hash set) a zistiť, či súborysú rozdielne. Pravdepodobne musíte v súpravách uložiť páry hodnôt indexov, aby ste zistili, ktorý index je duplicitný (a primerane preťažuje porovnávacích operátorov). Toto môže poskytnúť O (n záznam n) zložitosť.


0 pre odpoveď č. 4
//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