Menu
CoddyTech

Non-overlapping Intervals

Ricevi un elenco di intervalli sotto forma di due array: l'intervallo i va da starts[i] a ends[i]. Rimuovi il minor numero possibile di intervalli, in modo che nessuno dei rimanenti si sovrapponga. Due intervalli che si toccano soltanto, quando uno termina esattamente nel punto in cui inizia l'altro, non si sovrappongono.

Scrivi una funzione chiamata eraseOverlapIntervals che restituisca il numero minimo di intervalli da rimuovere.

Funzione

eraseOverlapIntervals(starts: integer-array, ends: integer-array) → integer
startsinteger-array
l'inizio di ciascun intervallo
endsinteger-array
la fine di ogni intervallo, allo stesso indice del suo inizio
Restituisceinteger
il minor numero di intervalli da rimuovere affinché i restanti non si sovrappongano

Vincoli

  • 1 ≤ starts.length == ends.length ≤ 5000
  • -5 × 104 ≤ starts[i] < ends[i] ≤ 5 × 104
  • Gli intervalli non sono ordinati. Due intervalli possono essere identici.

Esempi

Input
starts = [3, 1, 5, 2]ends = [6, 4, 7, 3]
Output
2
Spiegazione
In ordine di inizio, gli intervalli sono [1,4], [2,3], [3,6] e [5,7]. Mantieni [2,3] e [3,6], che si toccano soltanto, e rimuovi gli altri 2. Non puoi mantenerne tre: [1,4] si sovrappone a [2,3] e [3,6] si sovrappone a [5,7], e qualsiasi gruppo di tre dei quattro contiene una di queste coppie.

lock icon+17 test nascosti all’invio

challenge icon

Per approfondire

Supponiamo che ogni intervallo abbia anche un valore e che tu voglia ottenere il valore totale più alto tra gli intervalli che non si sovrappongono. Scegliere l’intervallo che termina per primo continua a funzionare? Cosa useresti invece?

Ripristina il codice
def eraseOverlapIntervals(starts, ends):
    # Scrivi il codice qui
Casi di test

Caso 1

Caso 2

Caso 3

Input

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

Atteso

2