Menu
CoddyTech

Insert Interval

MittelIntervallepython iconjava iconcpp iconc iconjs icon+10

Du erhältst eine nach Start sortierte Liste von Intervallen, dargestellt durch zwei Arrays gleicher Länge: Intervall i ist [starts[i], ends[i]]. Keine zwei davon überlappen sich oder berühren sich. Außerdem erhältst du ein neues Intervall, [newStart, newEnd]. Füge es ein, führe es mit jedem Intervall zusammen, das es überlappt oder berührt, und gib alle Intervalle als 2D-Array von [start, end]-Paaren zurück, sortiert nach Start.

Zwei Intervalle berühren sich, wenn eines dort endet, wo das andere beginnt, wie bei [2, 4] und [4, 8]; sich berührende Intervalle werden zu einem 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 Startpunkte
newStartinteger
der Beginn 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, sortiert nach start

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 überschneiden 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, daher bleiben beide unverändert.

lock icon+20 versteckte Tests beim Einreichen

challenge icon

Weiterführende Frage

Angenommen, du fügst nacheinander viele neue Intervalle in dieselbe Liste ein. Wie würdest du die Intervalle speichern, sodass jeder Einfügevorgang O(log n) plus einen Schritt für jedes alte Intervall kostet, das er verschlingt?

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

Fall 1

Fall 2

Fall 3

Eingabe

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

Erwartet

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