Menu
CoddyTech

Non-overlapping Intervals

Vous obtenez une liste d’intervalles sous forme de deux tableaux : l’intervalle i va de starts[i] à ends[i]. Supprimez le moins d’intervalles possible afin qu’aucun des intervalles restants ne se chevauche. Deux intervalles qui se touchent seulement, lorsque l’un se termine exactement au point où l’autre commence, ne se chevauchent pas.

Écrivez une fonction nommée eraseOverlapIntervals qui renvoie le nombre minimal d’intervalles à supprimer.

Fonction

eraseOverlapIntervals(starts: integer-array, ends: integer-array) → integer
startsinteger-array
le début de chaque intervalle
endsinteger-array
la fin de chaque intervalle, au même indice que son début
Renvoieinteger
le nombre minimal d’intervalles à supprimer pour que les autres ne se chevauchent pas

Contraintes

  • 1 ≤ starts.length == ends.length ≤ 5000
  • -5 × 104 ≤ starts[i] < ends[i] ≤ 5 × 104
  • Les intervalles ne sont pas triés. Deux intervalles peuvent être identiques.

Exemples

Entrée
starts = [3, 1, 5, 2]ends = [6, 4, 7, 3]
Sortie
2
Explication
Dans l’ordre de début, les intervalles sont [1,4], [2,3], [3,6] et [5,7]. Gardez [2,3] et [3,6], qui se touchent seulement, et supprimez les 2 autres. Vous ne pouvez pas en garder trois : [1,4] chevauche [2,3] et [3,6] chevauche [5,7], et n’importe quels trois des quatre contiennent l’une de ces paires.

lock icon+17 tests cachés à la soumission

challenge icon

Pour aller plus loin

Supposons que chaque intervalle ait aussi une valeur et que tu veuilles obtenir la valeur totale la plus élevée parmi les intervalles qui ne se chevauchent pas. Garder l’intervalle qui se termine en premier fonctionne-t-il toujours ? Qu’utiliserais-tu à la place ?

Réinitialiser le code
def eraseOverlapIntervals(starts, ends):
    # Écrivez le code ici
Cas de test

Cas 1

Cas 2

Cas 3

Entrée

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

Attendu

2