Menu
CoddyTech

Insert Interval

MittelIntervallepython iconjava iconcpp iconc iconjs icon+10

Du erhältst Intervalle, die nach ihrem Start sortiert sind, als zwei Arrays: Intervall i ist [starts[i], ends[i]], und keine zwei Intervalle überschneiden sich oder berühren sich. Füge das neue Intervall [newStart, newEnd] ein, führe es mit jedem Intervall zusammen, das es überschneidet oder berührt, und gib alle Intervalle als [start, end]-Paare zurück, sortiert nach ihrem Start.

Intervalle berühren sich, wenn eines dort endet, wo das andere beginnt, wie bei [2, 4] und [4, 8], und sich berührende Intervalle werden zusammengeführt. [1, 2] und [3, 4] haben keinen gemeinsamen Punkt und bleiben daher getrennt.

Funktion

insertInterval(starts: integer-array, ends: integer-array, newStart: integer, newEnd: integer) → integer-2d-array
startsinteger-array
den Anfang jedes Intervalls, in aufsteigender Reihenfolge
endsinteger-array
das Ende jedes Intervalls, passende Starts
newStartinteger
der Anfang des einzufügenden Intervalls
newEndinteger
das Ende des einzufügenden Intervalls
Gibt zurückinteger-2d-array
die Intervalle nach dem Einfügen als [start, end]-Paare, nach start sortiert

Einschränkungen

  • 1 ≤ starts.length == ends.length ≤ 2000
  • 0 ≤ starts[i] ≤ ends[i] ≤ 105
  • ends[i] < starts[i+1]: Die Intervalle sind nach ihrem Start sortiert, und keine zwei davon überlappen sich oder berühren sich.
  • 0 ≤ newStart ≤ newEnd ≤ 105

Beispiele

Eingabe
starts = [1, 5, 10, 15]ends = [3, 7, 12, 18]newStart = 6newEnd = 11
Ausgabe
[[1, 3], [5, 12], [15, 18]]
Erklärung
[6, 11] überschneidet sich mit [5, 7] und [10, 12], sodass die drei zu [5, 12] zusammengeführt werden. [1, 3] endet vor 6 und [15, 18] beginnt nach 12, also bleiben beide unverändert.
challenge icon

Weiterführende Frage

Wenn du viele Intervalle nacheinander einfügst, wie würdest du sie speichern, sodass jeder Einfügevorgang O(log n) plus einen Schritt pro altem Intervall kostet, das er verschluckt?

Code zurücksetzen
def insertInterval(starts, ends, newStart, newEnd):
    # Schreibe hier den Code

Test #1

Test #2

Test #3

Argumente

starts = [1, 5, 10, 15]
ends = [3, 7, 12, 18]
newStart = 6
newEnd = 11

Erwartete Ausgabe

[[1, 3], [5, 12], [15, 18]]