/ / Porównaj 2 elementy dwóch tablic w C ++ - c ++, tablice, funkcje, porównaj

Porównaj 2 elementy dwóch tablic w C ++ - c ++, tablice, funkcja, porównaj

Mam dwie tablice, każda tablica ma pewne wartości, na przykład:

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

teraz muszę porównać elementy tablicy(a) z elementami w tablicy (b) .. jeśli jest jakieś dopasowanie, program powinien zwrócić błąd lub wydrukować „błąd jest zduplikowany” itp. w powyższej sytuacji powinien zwrócić błąd coz a [0] = b [1], ponieważ oba mają te same wartości.

Jak mogę to zrobić??

Odpowiedzi:

7 dla odpowiedzi № 1

Jeśli tablice są tak małe, po prostu wykonałbym podejście z użyciem siły brutalnej i zapętliłbym obie tablice:

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

Jeśli masz do czynienia z dużymi tablicami, możesz rozważyć lepszy algorytm, ponieważ jest to O (n ^ 2).

Jeśli na przykład jedna z twoich tablic jest posortowana,możesz sprawdzić dopasowania znacznie szybciej, zwłaszcza gdy długość tablicy (-ów) staje się większa. Nie zawracałbym sobie głowy bardziej wyszukanymi rzeczami, jeśli twoje tablice zawsze będą miały kilka elementów.


3 dla odpowiedzi № 2

Zakładając, że obie tablice są posortowane, możesz przesuwać je krok po kroku w następujący sposób:

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

Powinno to mieć złożoność liniową, ale działa tylko wtedy, gdy zostaną „posortowane”.


2 dla odpowiedzi nr 3

Rozwiązanie dla posortowanych tablic zostało już opublikowane. Jeśli tablice nie są posortowane, możesz zbudować zestaw (np. std::set lub zestaw skrótów) z każdego z nich i sprawdź, czy zestawysą rozłączni. Prawdopodobnie musisz przechowywać pary wartości i indeksów w zestawach, aby dowiedzieć się, który indeks był zduplikowany (i odpowiednio przeciążać operatory porównania). Może to dać O (n log n) złożoność.


0 dla odpowiedzi nr 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