Menu
CoddyTech

Merge Intervals

Ricevi un insieme di intervalli, ciascuno un intervallo di numeri interi da un inizio a una fine. Unisci ogni gruppo di intervalli sovrapposti in un unico intervallo che copra l’intero gruppo e restituisci gli intervalli uniti ordinati per inizio. Gli intervalli che si toccano soltanto, come [1, 4] e [4, 5], si considerano sovrapposti.

Gli intervalli sono forniti in due array della stessa lunghezza: l’intervallo i è [starts[i], ends[i]]. Restituisci un array 2D, una lista di coppie [start, end].

Funzione

mergeIntervals(starts: integer-array, ends: integer-array) → integer-2d-array
startsinteger-array
l'inizio di ogni intervallo
endsinteger-array
la fine di ogni intervallo, allo stesso indice del suo inizio
Restituisceinteger-2d-array
gli intervalli uniti come coppie [start, end], ordinate per valore iniziale

Vincoli

  • 1 ≤ starts.length == ends.length ≤ 104
  • 0 ≤ starts[i] ≤ ends[i] ≤ 104
  • Gli intervalli arrivano in qualsiasi ordine.
  • Gli intervalli che si toccano solo a un estremo si considerano sovrapposti.

Esempi

Input
starts = [5, 1, 12, 3]ends = [7, 4, 14, 6]
Output
[[1, 7], [12, 14]]
Spiegazione
In ordine di inizio, [1, 4] si sovrappone a [3, 6], che si sovrappone a [5, 7], quindi i tre diventano [1, 7]. [12, 14] inizia dopo 7 e rimane da solo.
challenge icon

Per approfondire

Gli intervalli arrivano già uniti e ordinati in base al punto iniziale, e devi aggiungere un nuovo intervallo. Riesci a restituire l’elenco unito in tempo O(n), senza ordinare di nuovo?

Ripristina il codice
def mergeIntervals(starts, ends):
    # Scrivi il codice qui

Test #1

Test #2

Argomenti

starts = [5, 1, 12, 3]
ends = [7, 4, 14, 6]

Output atteso

[[1, 7], [12, 14]]