Menu
CoddyTech

Insert Interval

MoyenIntervallespython iconjava iconcpp iconc iconjs icon+10

Tu reçois une liste d’intervalles triés par début, sous la forme de deux tableaux de même longueur : l’intervalle i est [starts[i], ends[i]]. Aucun ne se chevauche ni ne se touche. Tu reçois également un nouvel intervalle, [newStart, newEnd]. Insère-le, fusionne-le avec chaque intervalle qu’il chevauche ou touche, puis renvoie tous les intervalles sous la forme d’un tableau à 2 dimensions 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 en un seul. [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, en faisant correspondre les 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 ordre de début, et aucun couple d’entre eux ne se chevauche ni ne se touche.
  • 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 fusionnent donc en [5, 12]. [1, 3] se termine avant 6 et [15, 18] commence après 12, donc les deux restent inchangés.

lock icon+20 tests cachés à la soumission

challenge icon

Pour aller plus loin

Supposons que vous insériez de nombreux nouveaux intervalles, les uns après les autres, dans la même liste. Comment stockeriez-vous les intervalles pour que chaque insertion coûte O(log n), plus une étape pour chaque ancien intervalle qu’elle engloutit ?

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

Cas 1

Cas 2

Cas 3

Entrée

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

Attendu

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