Sie haben k
Listen sortierter Ganzzahlen. Suchen Sie den kleinsten Bereich, der mindestens eine Zahl aus jeder der k
-Listen enthält.
Zum Beispiel
%Vor% Der kleinste Bereich hier wäre [14, 18]
, da er 14
von list 1
, 15
von list 2
und 18
von list 3
enthält.
Mein Ansatz ist:
K
lists Aber das einzige Problem, mit dem ich zu tun habe, ist: Angenommen, für eine Liste gibt es keine Elemente mehr, als sollte ich dort enden oder sollte ich fortfahren?
Sehr schöner O (n log n) -Algorithmus!
Sie können dort enden, weil Sie nie das bessere Intervall finden werden, das den gegebenen Zustand "Bereich, der mindestens eine Zahl von jeder der k Listen enthält" erfüllt.
Angenommen, Sie verlassen das aktuelle Minimum m
(das letzte Element aus einer Liste) und entfernen stattdessen etwas (nicht das Minimum) aus einer anderen Liste. In diesem Fall kann der Bereich nur wachsen (weil das Minimum des Bereichs durch m
bestimmt wird). Es macht also keinen Sinn, den Algorithmus zu stoppen.
Nein, das ist nicht Ihre Endbedingung. Schau dir dieses Beispiel an:
%Vor% Der Bereich ist ziemlich klar [0,1]
, aber wenn Sie aufgehört haben, sobald Sie eine leere Liste gefunden haben, würden Sie [0,0]
zurückgeben.
Sie können also nur aufhören, wenn Sie wissen, dass Sie Werte aus allen k
lists gesehen haben und in einer der Listen keine Einträge mehr vorhanden sind. Wenn Sie die Min- und Max-Werte für jede Liste separat verfolgen, sollte das ziemlich einfach sein, da Sie einfach sicherstellen können, dass es für jede Liste einen Min- und Max-Wert gibt.
Tags und Links algorithm java data-structures