Merge Intervals
Ein Intervall ist ein Bereich ganzer Zahlen mit einem Anfang und einem Ende. Intervalle, die mindestens einen Punkt gemeinsam haben, gehören zusammen, ebenso Intervalle, die sich nur berühren: [1, 4] und [4, 5] werden zu [1, 5]. Ziel ist es, jede Gruppe überlappender Intervalle durch ein Intervall zu ersetzen, das die gesamte Gruppe abdeckt.
Der Trick ist die Reihenfolge. Sobald die Intervalle nach ihrem Anfang sortiert sind, folgt alles, was sich mit dem Intervall überschneidet, das du gerade bildest, direkt darauf. Durchlaufe die sortierte Liste und behalte das zuletzt zusammengeführte Intervall im Blick: Liegt der nächste Anfang höchstens an dessen Ende, erweitere das Ende; andernfalls gibt es eine echte Lücke, also beginnt ein neues Intervall. Das Sortieren kostet O(n log n), und das Durchlaufen erfolgt in einem einzigen Durchgang.
Schreibe eine Funktion namens mergeIntervals, die zwei ganzzahlige Arrays, starts und ends, entgegennimmt und die zusammengeführten Intervalle zurückgibt.
Die Intervalle werden als zwei Arrays übergeben, da nicht jede hier verwendete Sprache ein 2D-Array als Eingabe akzeptiert: Intervall i ist [starts[i], ends[i]], und beide Arrays haben dieselbe Länge. Die Intervalle sind nicht sortiert.
Fasse alle Gruppen überlappender Intervalle zusammen. Intervalle, die sich nur an einem Ende berühren, gelten ebenfalls als überlappend. Gib die zusammengeführten Intervalle als 2D-Array [[start, end], ...] zurück, nach Start sortiert.
Zum Beispiel beschreiben starts = [5, 1, 12, 3] und ends = [7, 4, 14, 6] die Intervalle [5, 7], [1, 4], [12, 14] und [3, 6], die zu [[1, 7], [12, 14]] zusammengeführt werden.
Einschränkungen: 1 <= starts.length == ends.length <= 10^4, 0 <= starts[i] <= ends[i] <= 10^4.
Funktion
- arg1integer-array
- arg2integer-array
- Gibt zurückinteger-2d-array
Beispiele
- Eingabe
- arg1 = [5, 1, 12, 3]arg2 = [7, 4, 14, 6]
- Ausgabe
- [[1, 7], [12, 14]]
- Eingabe
- arg1 = [6, 1]arg2 = [9, 6]
- Ausgabe
- [[1, 9]]
+12 versteckte Tests beim Einreichen
Tipps
Öffne sie nacheinander. Jeder verrät ein bisschen mehr.
Ordne jedem Anfang zuerst sein Ende zu, damit du mit vollständigen Intervallen statt mit zwei separaten Arrays arbeitest.
Sortiere die Intervalle nach ihrem Start. Danach kann sich ein Intervall nur mit der unmittelbar davorliegenden Gruppe überschneiden, niemals mit einer weiter zurückliegenden.
Gehe die sortierten Intervalle durch und behalte dabei das zuletzt zusammengeführte Intervall im Blick. Wenn der nächste Start kleiner oder gleich seinem Ende ist, setze sein Ende auf das größere der beiden Enden. Andernfalls ist diese Gruppe abgeschlossen und das nächste Intervall eröffnet eine neue.
Eine vollständige Lösungserklärung zu dieser Aufgabe folgt bald.
Ähnliche Aufgaben
Aufgaben mit denselben Ideen. Wer zwei oder drei davon löst, behält das Muster.
Python
def mergeIntervals(starts, ends):
# Schreibe hier CodeFall 1
Fall 2
Eingabe
arg1 = [5, 1, 12, 3] arg2 = [7, 4, 14, 6]
Erwartet
[[1, 7], [12, 14]]