1. Verwenden von O (1) zusätzlichem Speicherplatz in O (n log n) Zeit
Dies ist zum Beispiel möglich:
- Führen Sie zuerst eine direkte O (n log n) -Sortierung durch
- Gehen Sie dann einmal durch die Liste und schreiben Sie die erste Instanz von jedem zurück an den Anfang der Liste
Ich glaube, der Partner von ejel hat Recht, dass der beste Weg, dies zu tun, eine direkte Zusammenführungssortierung mit einem vereinfachten Zusammenführungsschritt wäre, und dass dies wahrscheinlich die Absicht der Frage ist, wenn Sie z. Schreiben einer neuen Bibliotheksfunktion, um dies so effizient wie möglich zu tun, ohne die Eingaben verbessern zu können, und es würde Fälle geben, in denen dies abhängig von der Art der Eingaben ohne Hash-Tabelle sinnvoll wäre. Aber ich habe das nicht wirklich überprüft.
2. Verwenden von O (viel) zusätzlichem Speicherplatz in O (n) Zeit
- Deklarieren Sie ein Array mit Nullen, das groß genug ist, um alle Ganzzahlen aufzunehmen
- Gehen Sie einmal durch das Array
- Setzen Sie das entsprechende Array-Element für jede Ganzzahl auf 1.
- Wenn es bereits 1 war, überspringen Sie diese Ganzzahl.
Dies funktioniert nur, wenn mehrere fragwürdige Annahmen zutreffen:
- Es ist möglich, Speicher kostengünstig auf Null zu setzen, oder die Größe der Ints ist im Vergleich zu ihrer Anzahl gering
- Gerne fragen Sie Ihr Betriebssystem nach 256 ^ sizepof (int) Speicher
- und es wird es für Sie wirklich sehr, sehr effizient zwischenspeichern, wenn es gigantisch ist
Es ist eine schlechte Antwort, aber wenn Sie viele Eingabeelemente haben, aber alle 8-Bit-Ganzzahlen (oder vielleicht sogar 16-Bit-Ganzzahlen) sind, könnte dies der beste Weg sein.
3. O (wenig) -ish zusätzlicher Raum, O (n) -ish Zeit
Wie # 2, aber verwenden Sie eine Hash-Tabelle.
4. Der klare Weg
Wenn die Anzahl der Elemente gering ist, ist das Schreiben eines geeigneten Algorithmus nicht sinnvoll, wenn anderer Code schneller zu schreiben und schneller zu lesen ist.
Z.B. Gehen Sie durch das Array für jedes eindeutige Element (dh das erste Element, das zweite Element (Duplikate des ersten wurden entfernt) usw.) und entfernen Sie alle identischen Elemente. O (1) zusätzlicher Raum, O (n ^ 2) Zeit.
Z.B. Verwenden Sie dazu Bibliotheksfunktionen. Effizienz hängt davon ab, welche Sie leicht zur Verfügung haben.