Edit: Die Werte der Elemente reichen von 0 bis 99 von 0 bis 99. Ist das überhaupt möglich? Ich habe versucht, den folgenden Code zu verwenden, aber es ist offensichtlich falsch:Wie überprüft man, ob zwei Arrays gleicher Größe die gleichen Werte in C haben? (Komplexität O (n))
#include <stdio.h>
int scrambled(unsigned int a[], unsigned int b[], unsigned int len) {
if (len = 0) {
return 1;
} else {
int sumA, sumB, i;
for (i = 0; i < len; i++) {
sumA += a[i];
}
for (i = 0; i < len; i++) {
sumB += b[i];
}
if (sumA == sumB) {
return 1;
} else {
return 0;
}
}
}
ich davon aus, dass zwei Felder mit der gleichen Summe der Werte würden auch die gleichen Werte haben, aber dies ist nicht der Fall. {2,2}
und {3,1}
haben die gleiche Summe, aber nicht die gleichen Werte.
Gibt es eine Möglichkeit zu überprüfen, ob ein Array mit anderen Worten eine Permutation eines anderen mit linearer Komplexitätszeit ist?
Sie können 1) Quicksorting beide Arrays und dann nur Vergleich der entsprechenden Elemente, oder 2) Konvertieren jedes Array in einen Min-Heap und anschließend Pop-Elemente und vergleichen. –
Im Falle von Quicksorting wäre die Komplexität nicht O (n), oder? – Lyesmith
Oh, Entschuldigung. Ich war mir nicht bewusst, dass das O (n) ein Zwang war, ich dachte, du hättest es als die Komplexität Deiner Methode erwähnt. –