, sind ganze Zahlen, so dass für alle und das Auftreten von jedem Zahl mit Ausnahme einer bestimmten Zahl in ist eine ungerade Zahl. Versuchen Sie, die Nummer zu finden, deren Vorkommen eine gerade Zahl ist.
Es gibt einen -Algorithmus: Wir sortieren in und in viele Teile, deren Elementwert der ist gleich, daher können wir das Auftreten jedes Elements zählen.
Ich möchte einen Worst- Case- -Zeit- und -O -Raum-Algorithmus finden.
Angenommen, und , ist die Radix-Sortierung daher nicht akzeptabel. Binäre bitweise Operationen sind zulässig, z. B. .
algorithms
search-algorithms
Yai0Phah
quelle
quelle
Antworten:
Hier ist eine Idee für einen einfachen Algorithmus; Zähle einfach alle Vorkommen!
Alles in allem erhalten Sie einen linearen Zeitalgorithmus, der (im Sinne einer Zuweisung) viel Speicher verwenden kann. Beachten Sie, dass es hier entscheidend ist, unabhängig von in konstanter Zeit auf zugreifen zu können .C m
Ein zusätzliches , das an den Raum gebunden ist, ist bei diesem Ansatz schwieriger; Ich kenne keine Wörterbuchdatenstruktur, die eine -Zeit-Suche bietet . Sie können Hash-Tabellen verwenden, für die hier Implementierungen mit erwarteter Suchzeit ( der Tabellengröße, der Anzahl der gespeicherten Elemente) vorhanden sind, damit Sie mit linearem Raum beliebig gut werden können - erwartungsgemäß. Wenn alle Werte in demselben Hashwert zugeordnet sind, werden Sie geschraubt.O(n) O(1) O(1+k/n) n k A
quelle
Eine fast triviale Lösung - die jedoch Leerzeichen verwendet - ist die Verwendung einer Hash-Map. Denken Sie daran, dass eine Hash-Map die Laufzeit zum Hinzufügen und Nachschlagen von Elementen amortisiert hat .Θ(n) O(1)
Daher können wir den folgenden Algorithmus verwenden:
Ordnen Sie eine Hash-Karte . Iterate über . Erhöhen Sie für jedes Element die Anzahl der beobachteten Vorkommen, dh .H A i∈A H(i)++
Durchlaufen Sie den Schlüsselsatz der Hash-Map und überprüfen Sie, welcher der Schlüssel eine gleichmäßige Anzahl von Vorkommen aufweist.
Dies ist ein einfacher Algorithmus, der keinen großen Trick verwendet, aber manchmal reicht sogar dieser aus. Wenn nicht, möchten Sie möglicherweise angeben, welche Speicherplatzbeschränkungen Sie auferlegen.
quelle