Menu
CoddyTech

Merge Intervals

Tu reçois un ensemble d’intervalles, chacun étant une plage de nombres entiers allant d’un début à une fin. Fusionne chaque groupe d’intervalles qui se chevauchent en un seul intervalle couvrant tout le groupe, puis renvoie les intervalles fusionnés triés par début. Les intervalles qui se touchent seulement, comme [1, 4] et [4, 5], sont considérés comme se chevauchant.

Les intervalles sont fournis sous forme de deux tableaux de même longueur : l’intervalle i est [starts[i], ends[i]]. Tu renvoies un tableau à 2 dimensions, une liste de paires [start, end].

Fonction

mergeIntervals(starts: integer-array, ends: integer-array) → integer-2d-array
startsinteger-array
le début de chaque intervalle
endsinteger-array
la fin de chaque intervalle, au même indice que son début
Renvoieinteger-2d-array
les intervalles fusionnés sous forme de paires [start, end], triées par valeur de début

Contraintes

  • 1 ≤ starts.length == ends.length ≤ 104
  • 0 ≤ starts[i] ≤ ends[i] ≤ 104
  • Les intervalles arrivent dans n’importe quel ordre.
  • Les intervalles qui ne se touchent qu’à une extrémité sont considérés comme se chevauchant.

Exemples

Entrée
starts = [5, 1, 12, 3]ends = [7, 4, 14, 6]
Sortie
[[1, 7], [12, 14]]
Explication
Dans l’ordre de début, [1, 4] chevauche [3, 6], qui chevauche [5, 7] ; les trois fusionnent donc en [1, 7]. [12, 14] commence après 7 et reste à part.
challenge icon

Pour aller plus loin

Les intervalles sont déjà fusionnés et triés par ordre de début, et vous devez ajouter un nouvel intervalle. Pouvez-vous renvoyer la liste fusionnée en O(n), sans la trier à nouveau ?

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

Test #1

Test #2

Arguments

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

Résultat attendu

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