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ď č. 1Ak 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