Menu
CoddyTech

Insert Interval

MedioIntervallipython iconjava iconcpp iconc iconjs icon+10

Ricevi gli intervalli ordinati per punto iniziale in due array: l’intervallo i è [starts[i], ends[i]] e non ci sono due intervalli che si sovrappongono o si toccano. Inserisci il nuovo intervallo [newStart, newEnd], uniscilo a ogni intervallo con cui si sovrappone o che tocca e restituisci tutti gli intervalli come coppie [start, end] ordinate per punto iniziale.

Gli intervalli si toccano quando uno termina nel punto in cui inizia l’altro, come accade con [2, 4] e [4, 8], e gli intervalli che si toccano vengono uniti. [1, 2] e [3, 4] non hanno punti in comune, quindi restano separati.

Funzione

insertInterval(starts: integer-array, ends: integer-array, newStart: integer, newEnd: integer) → integer-2d-array
startsinteger-array
l'inizio di ciascun intervallo, in ordine crescente
endsinteger-array
la fine di ogni intervallo, le corrispondenze iniziano
newStartinteger
l'inizio dell'intervallo da inserire
newEndinteger
la fine dell'intervallo da inserire
Restituisceinteger-2d-array
gli intervalli dopo l'inserimento come coppie [inizio, fine], ordinate per inizio

Vincoli

  • 1 ≤ starts.length == ends.length ≤ 2000
  • 0 ≤ starts[i] ≤ ends[i] ≤ 105
  • ends[i] < starts[i+1]: gli intervalli sono ordinati per inizio e non si sovrappongono né si toccano.
  • 0 ≤ newStart ≤ newEnd ≤ 105

Esempi

Input
starts = [1, 5, 10, 15]ends = [3, 7, 12, 18]newStart = 6newEnd = 11
Output
[[1, 3], [5, 12], [15, 18]]
Spiegazione
[6, 11] si sovrappone a [5, 7] e [10, 12], quindi i tre intervalli diventano [5, 12]. [1, 3] termina prima di 6 e [15, 18] inizia dopo 12, quindi entrambi rimangono invariati.
challenge icon

Per approfondire

Se inserisci molti intervalli uno dopo l’altro, come li memorizzeresti in modo che ogni inserimento costi O(log n) più un passaggio per ogni vecchio intervallo che ingloba?

Ripristina il codice
def insertInterval(starts, ends, newStart, newEnd):
    # Scrivi il codice qui

Test #1

Test #2

Test #3

Argomenti

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

Output atteso

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