Ich wurde gerade mit einer Frage interviewt, und ich bin gespannt, was die Antwort sein sollte. Das Problem war im Wesentlichen:Optimale Suche nach k Minimalwerten in unsortierten Liste von ganzen Zahlen
Angenommen, Sie haben eine unsortierte Liste von n ganzen Zahlen. Wie finden Sie die k Mindestwerte in dieser Liste? Das heißt, wenn Sie eine Liste von [10, 11, 24, 12, 13] haben und nach den 2 Mindestwerten suchen, erhalten Sie [10, 11].
Ich habe eine O (n * log (k)) Lösung, und das ist mein Bestes, aber ich bin gespannt, was andere Leute kommen. Ich werde davon absehen, die Gehirne der Leute zu verschmutzen, indem ich meine Lösung poste und sie in kurzer Zeit bearbeiten werde.
EDIT # 1: Zum Beispiel eine Funktion wie: Liste getMinVals (Liste & l, int k)
EDIT # 2: Es sieht aus wie es ein Auswahlalgorithmus ist, also werde ich in meiner Lösung werfen auch; Iterieren über die Liste und Verwenden einer Prioritätswarteschlange zum Speichern der Mindestwerte. Die Spezifikation für die Prioritätswarteschlange bestand darin, dass die Maximalwerte an der Spitze der Prioritätswarteschlange landen würden. Beim Vergleich des Oberteils mit einem Element würde daher der Oberkopf aufgeklappt und das kleinere Element verschoben. Dies nahm an, dass die Prioritätswarteschlange einen O (log n) -Push und einen O (1) -Pop hatte.
Ich erinnere mich daran, diese Fragen vor über einem Jahr zu tun und die Antwort, die ich bekam, war nicht besser als O (n * log (k)), also denke ich, dass du es vielleicht schon hast. – achinda99
Zufälligerweise musste ich dies erst gestern auf dem Job implementieren. Es ist O (n * log (k)), obwohl es ein paar verschiedene Wege gibt, dorthin zu gelangen. – Crashworks
Es ist immer schön zu hören, dass ich das Interview nicht gemacht habe. Das heißt, die 2-3 Lösungen, die ich vorher probiert habe, haben mir wahrscheinlich nicht viel geholfen. –