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 № 1Jeś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