Ich versuche gerade, einen Algorithmus zu schreiben, der mit Hilfe von Java zwei Arrays auf Gleichheit in O (N) -Zeit scannen kann. Die Idee ist, dass die Arrays unabhängig von der Reihenfolge genau gleich sein sollten, damit die Methode "true" zurückgibt. Was mir empfohlen wurde, war die Verwendung von linearem Scan, aber eine Schleife zum Scannen und Vergleichen von zwei Arrays. Das ist, was ich habe:Linearer Scan zum Vergleichen zweier Arrays in Java
public boolean equals(ArraySet<T> s) {
T[] sArray = s.getArray();
boolean isEqual = true;
if (!(s.size() == size())) {
return false;
}
int i = 0;
int p = 0;
while ((i < elements.length) && (p < sArray.length)) {
if (elements[i].compareTo(sArray[p]) != 0) {
isEqual = false;
p++;
continue;
}
i++;
p = 0;
isEqual = true;
}
return isEqual;
Ich bin zuversichtlich, dass dieser Algorithmus korrekt die Gleichheit zurückkehren wird, aber ich bin nicht so sicher, dass es so in O (N) Zeitkomplexität zu tun. Kann ich etwas optimieren, um sicherzustellen, dass diese Methode mit der richtigen Effizienz funktioniert? ArraySet ist eine Set-Implementierung, die ein Array-Feld enthält, das von getArray() zurückgegeben wird. Es kann angenommen werden, dass dieses Array und das lokale Array bereits in aufsteigender natürlicher Reihenfolge sind, jedoch kann nicht davon ausgegangen werden, dass das Parameterarray und das lokale Array die gleichen Elemente aufweisen.
Zuerst schlage ich vor, einige Tests zu schreiben, um zu überprüfen, ob Ihr Algorithmus korrekt ist. –
Was sind 'Elemente'? –
Sehen Sie, ob '1,2,2' und' 2,1,1' als gleich zu vergleichen wären. – dasblinkenlight