Benutzerdefinierte Datenstruktur für push -, pop-und minimum zu finden
Ich wurde nur gebeten, ein interview-Frage mit der Firma A wie folgt:
Frage : Entwerfen Sie eine Datenstruktur, in der Sie 3 Operationen push, pop und finden Sie das minimum. Sie sollten alles tun, die 3 Operationen in konstanter Zeit.
Meine Antwort : würde ich eine verknüpfte Liste, in der ich tun kann, einfügen und entfernen in konstanter Zeit, und ich würde ein extra Speicher das minimum.
Er kam mit einer zweiten Frage sagen, dass, wenn Sie pop die minimale, wie finden Sie das zweite minimum? wieder, in konstanter Zeit.
Was würden Sie ihm sagen?
- So gibt es ya gehen. 3 ordentliche Antworten zu sagen, die gleiche Sache, auf unterschiedliche Arten umgesetzt 😛
- Sie sind nicht konstant Zeit.
- Mögliche Duplikate von: stackoverflow.com/questions/4092690/... und stackoverflow.com/questions/685060/...
- Sorry, den link in meine enge Abstimmung ist falsch, aber das ist noch ein Duplikat des 685050
Du musst angemeldet sein, um einen Kommentar abzugeben.
Was ist, wenn Sie eine verkettete Liste, wie Sie sagte, sondern auch speichern Sie den aktuellen minimum-Wert. Beim hinzufügen einer neuen Nummer, sieht es bei den vorherigen min. - und änderungen der aktuellen min, um den aktuellen Wert, wenn der aktuelle Wert niedriger ist.
E. g... Übernehmen Sie die Daten auch haben: 3, 6, 4, 2, 7, 1. Dann ist das, was die Liste würde wie folgt Aussehen
Wert|min
3/3 -> 6/3 -> 4/3 -> 2/2 -> 7/2 -> 1/1
Dass merken die Minuten, wie Sie Elemente hinzufügen/entfernen.
BEARBEITEN:
Ich erwähnte Rückschritt, es wäre so etwas wie dieses:
1/1 -> 7/2 -> 2/2 -> 4/3 -> 6/3 -> 3/3
Dann sind Sie wouln ' T müssen den "footer".
pop
Betrieb ist nicht konstantpush
undpop
Minimale stack-Frage - http://courses.csail.mit.edu/iap/interview/Hacking_a_Google_Interview_Practice_Questions_Person_A.pdf
Aus der PDF-Datei:
Frage: Mindest-Stack
Beschreiben eine stack-Datenstruktur, unterstützt "push" und "pop", und "minimum"
Operationen. "Find minimum" gibt das kleinste element im stack.
Gute Antwort: Speichern Sie zwei Stapel, von denen der eine enthält alle Elemente, die im stack
und einer von denen ist ein Stapel von minima. Schieben Sie ein element, schieben Sie es auf den ersten
stack. Prüfen Sie, ob es kleiner ist als das oberste Element auf dem zweiten Stapel; wenn dem so ist, drücken Sie
auf dem zweiten Stapel. Pop ein Element, pop es aus dem ersten Stapel. Wenn es die top
element des zweiten stack, pop es aus dem zweiten Stapel. Zu finden, die minimale
element, schicken Sie einfach das element an der Oberseite des zweiten stack. Jeder Betrieb
dauert O(1) Zeit.
Lassen, jeder Knoten halten ein Verweis auf die bisher kleinste Element. Also, wenn Sie aus dem pop-kleinste Element, das Sie wiederherstellen können, die bisher kleinste. Da kann man nur push-und pop-es wird der richtige Knoten.
Hier ist der C-code die Implementierung des oben beschriebenen Algorithmus gegeben, von Bryce Siedschlaw:
Dieses werden Sie go wild - http://algods-cracker.blogspot.in/2011/09/design-data-structure-which-supports.html