Ich kann daran denken, sie zu sortieren und dann jedes einzelne Element nacheinander durchzugehen, aber das ist nlogn. Gibt es eine lineare Methode, um bestimmte Elemente in einer Liste zu zählen?Wie können verschiedene Werte in einer Liste in linearer Zeit gezählt werden?
Antwort
Update: - deutliche und eindeutige
Wenn Sie suchen "einzigartig" Werte (wie in, wenn Sie ein Element sehen "JASON" mehr als einmal, als es nicht ist mehr eindeutig und sollte nicht gezählt werden)
Sie, dass durch die Verwendung eines HashMap in linearer Zeit tun;)
(Die verallgemeinerte/sprachunabhängig Idee ist Hash table)
Jeder Eintrag eines HashMap/Hash-Tabelle ist <KEY, VALUE>
Paar wo die Schlüssel eindeutig sind (jedoch keine Einschränkungen für deren entsprechenden Wert in dem Paar)
Schritt 1:
iterieren all einmal Elemente in der Liste: O (n)
- Für jedes Element in der Liste zu sehen ist, zu überprüfen, um zu sehen, ob es in der HashMap ist bereits O (1), abgeschrieben
- Wenn nicht, fügen Sie es dem HashMap mit dem Wert des Elements in der Liste als Schlüssel, und die Anzahl der Sie diesen Wert gesehen haben, soweit die VALUE O (1)
- Wenn ja, haben die Anzahl der Male erhöhen Sie diese Taste so weit O (1)
Schritt 2 gesehen:
Iterieren durch die HashMap und zählen die Schlüssel mit Wert gleich genau 1 (also unique) O (n)
Analyse:
- Laufzeit: O (n), amortisiert
- Raum: O (U), wobei U die Anzahl der verschiedenen Werte ist.
Wenn suchen Sie „distinct“ Werte jedoch (wie in, wenn Sie wollen, zählen, wie viele verschiedenen Elemente sind), verwenden Sie einen HashSet anstelle einer HashMap/Hash Tabelle und dann einfach die Größe des HashSet abfragen.
Sie können this extremely cool O(n)-time and O(1)-space in-place algorithm zum Entfernen von Duplikaten anpassen, um bestimmte Werte zu zählen - zählen Sie einfach die Anzahl der Werte, die dem Sentinel-Wert entsprechen, in einem abschließenden O (n) -Pass und subtrahieren Sie diesen von der Größe der Liste.
- 1. Sortierung in linearer Zeit?
- 2. Wie können die in einer Liste gespeicherten Werte angezeigt werden?
- 3. Linearer Zeit Graphalgorithmus
- 4. Berechnung des Modus (häufigstes Element) einer Menge in linearer Zeit?
- 5. , wie verschiedene Werte in einer Sammlung
- 6. Wie können Zeilen in Textdateien gezählt und in einer einzigen Datei gespeichert werden?
- 7. Wie können Werte in einer Karte zufällig gemischt werden?
- 8. Wie können mehrere Dropdown-Werte in einer Variablen gespeichert werden?
- 9. Wie können Attribute von einer Entität in Core Data mit Swift und iOS 9 gezählt werden?
- 10. Implementieren Reverse in Haskell, die in linearer Zeit läuft
- 11. SQL Server Summe der Werte in Spalte gezählt 3 verschiedene Möglichkeiten in der gleichen Ausgabe
- 12. Tabelle mit allen Wertepaaren aus einer Spalte in R erstellen, wobei eindeutige Werte gezählt werden
- 13. Wie können Werte in Schlüsseln in einem Wörterbuch innerhalb einer Schleife hinzugefügt werden?
- 14. Iteration eines randomisierten Algorithmus in festen Raum und linearer Zeit
- 15. Wie können in Redshift/Postgres Zeilen gezählt werden, die eine Bedingung erfüllen?
- 16. Python: Liste vorhandener Werte in einer Liste
- 17. Zufällige topologische Sortierung mit gleichmäßiger Verteilung in nahezu linearer Zeit
- 18. Sortiere erste n Ganzzahlen in linearer Zeit und konstantem Raum
- 19. Wie können "Standard" -Werte in überschriebenen WinForm-Steuerelementen verhindert werden?
- 20. Wie können Werte für LuaSQL angegeben werden?
- 21. jQuery/Javascript finde Werte in einer Liste
- 22. Wie werden Lauflängen von NULL-Läufen in MySQL gezählt?
- 23. Wählen Sie drei verschiedene Werte aus der Liste in Python
- 24. Wie können bestimmte Zeilen basierend auf Daten in Tabellenfeldern für die Paginierung gezählt werden?
- 25. Zählt Werte in einer Liste, die als Werte in XML-Elementen dargestellt werden.
- 26. Wie können Werte programmgesteuert in ein zweidimensionales Array eingefügt werden?
- 27. Wie können Werte in Google Analytics gelöscht werden?
- 28. Wie speichert man verschiedene Datentypen in einer Liste? (C++)
- 29. Linearer Programmiermaximierungscode in MATLAB
- 30. Können verschiedene DLL-Versionen in derselben Anwendung geladen werden?
So finden Sie eine Anzahl eindeutiger Werte in der Liste und die Frage besteht darin, eine Anzahl verschiedener Werte zu finden. Um bestimmte Werte zu zählen, verwenden Sie [HashSet] (http://docs.oracle.com/javase/6/docs/api/java/util/HashSet.html). Fügen Sie einfach alle Elemente der Liste zum HashSet hinzu und überprüfen Sie deren Kardinalität. – user1871166
Möchten Sie nicht ALLE Werte in der HashMap in Schritt 2 zählen und nicht nur die mit dem Wert 1? Auf diese Weise würden nur die Elemente gezählt, die genau einmal vorkommen, z. Die Liste {PAT, PAT, STEVE, JOEL} würde den Wert 2 ergeben (nur STEVE und JOEL treten einmal auf) und nicht den korrekten Wert von 3 verschiedenen Namen. – Jason
Hinweis! Es gibt hier eine Interpretation Diskrepanz: Meine Annahme ist, dass, wenn Sie einen bestimmten Wert 2 oder öfter sehen, ist es nicht mehr "distinct"/"unique" - aber ich werde das bearbeiten, um klarer zu sein. –