Menu
CoddyTech

Insert Interval

MoyenIntervallespython iconjava iconcpp iconc iconjs icon+10

Tu reçois des intervalles triés par début sous forme de deux tableaux : l’intervalle i est [starts[i], ends[i]], et aucun couple d’intervalles ne se chevauche ni ne se touche. Insère le nouvel intervalle [newStart, newEnd], fusionne-le avec chaque intervalle qu’il chevauche ou touche, puis renvoie tous les intervalles sous forme de paires [start, end] triées par début.

Deux intervalles se touchent lorsque l’un se termine là où l’autre commence, comme [2, 4] et [4, 8], et les intervalles qui se touchent fusionnent. [1, 2] et [3, 4] n’ont aucun point en commun, ils restent donc séparés.

Fonction

insertInterval(starts: integer-array, ends: integer-array, newStart: integer, newEnd: integer) → integer-2d-array
startsinteger-array
le début de chaque intervalle, par ordre croissant
endsinteger-array
la fin de chaque intervalle, correspondant aux débuts
newStartinteger
le début de l’intervalle à insérer
newEndinteger
la fin de l’intervalle à insérer
Renvoieinteger-2d-array
les intervalles après l’insertion sous forme de paires [start, end], triées par start

Contraintes

  • 1 ≤ starts.length == ends.length ≤ 2000
  • 0 ≤ starts[i] ≤ ends[i] ≤ 105
  • ends[i] < starts[i+1] : les intervalles sont triés par début, et deux d'entre eux ne se chevauchent pas et ne se touchent pas.
  • 0 ≤ newStart ≤ newEnd ≤ 105

Exemples

Entrée
starts = [1, 5, 10, 15]ends = [3, 7, 12, 18]newStart = 6newEnd = 11
Sortie
[[1, 3], [5, 12], [15, 18]]
Explication
[6, 11] chevauche [5, 7] et [10, 12], les trois deviennent donc [5, 12]. [1, 3] se termine avant 6 et [15, 18] commence après 12, donc les deux restent inchangés.
challenge icon

Pour aller plus loin

Si tu insères de nombreux intervalles les uns après les autres, comment les stockerais-tu pour que chaque insertion coûte O(log n) plus une étape par ancien intervalle qu’elle absorbe ?

Réinitialiser le code
def insertInterval(starts, ends, newStart, newEnd):
    # Écrivez le code ici

Test #1

Test #2

Test #3

Arguments

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

Résultat attendu

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