Merge Intervals
Un intervalle est une plage de nombres entiers avec un début et une fin. Les intervalles qui partagent au moins un point vont ensemble, tout comme ceux qui se touchent : [1, 4] et [4, 5] deviennent [1, 5]. Le but est de remplacer chaque groupe d’intervalles qui se chevauchent par un seul intervalle couvrant tout le groupe.
L’astuce, c’est l’ordre. Une fois les intervalles triés par début, tout intervalle qui chevauche celui que tu construis vient juste après. Parcours la liste triée et conserve le dernier intervalle fusionné : si le début suivant est inférieur ou égal à sa fin, étends la fin ; sinon, il y a un véritable espace, donc un nouvel intervalle commence. Le tri coûte O(n log n) et le parcours se fait en un seul passage.
Écris une fonction nommée mergeIntervals qui reçoit deux tableaux d’entiers, starts et ends, et renvoie les intervalles fusionnés.
Les intervalles sont fournis sous forme de deux tableaux, car tous les langages présentés ici n’acceptent pas un tableau à 2 dimensions en entrée : l’intervalle i est [starts[i], ends[i]], et les deux tableaux ont la même longueur. Les intervalles ne sont pas triés.
Fusionne chaque groupe d’intervalles qui se chevauchent. Les intervalles qui se touchent à une extrémité sont également considérés comme se chevauchant. Renvoie les intervalles fusionnés sous forme de tableau à 2 dimensions [[start, end], ...], triés par début.
Par exemple, starts = [5, 1, 12, 3] et ends = [7, 4, 14, 6] décrivent [5, 7], [1, 4], [12, 14] et [3, 6], qui fusionnent en [[1, 7], [12, 14]].
Contraintes : 1 <= starts.length == ends.length <= 10^4, 0 <= starts[i] <= ends[i] <= 10^4.
Fonction
- arg1integer-array
- arg2integer-array
- Renvoieinteger-2d-array
Exemples
- Entrée
- arg1 = [5, 1, 12, 3]arg2 = [7, 4, 14, 6]
- Sortie
- [[1, 7], [12, 14]]
- Entrée
- arg1 = [6, 1]arg2 = [9, 6]
- Sortie
- [[1, 9]]
+12 tests cachés à la soumission
Indices
Ouvrez-les un par un. Chacun en dévoile un peu plus.
Associez d’abord chaque début à sa fin, afin de travailler avec des intervalles complets plutôt qu’avec deux tableaux distincts.
Trie les intervalles par ordre de début. Ensuite, un intervalle ne peut chevaucher que le groupe qui le précède immédiatement, jamais un groupe plus éloigné.
Parcourez les intervalles triés en conservant le dernier intervalle fusionné. Si le début suivant est inférieur ou égal à sa fin, définissez sa fin comme étant la plus grande des deux fins. Sinon, ce groupe est terminé et l’intervalle suivant en ouvre un nouveau.
Une explication complète de ce problème arrive bientôt.
Problèmes similaires
Des problèmes qui reposent sur les mêmes idées. En résoudre deux ou trois, c’est ce qui ancre un schéma.
Python
def mergeIntervals(starts, ends):
# Écrivez le code iciCas 1
Cas 2
Entrée
arg1 = [5, 1, 12, 3] arg2 = [7, 4, 14, 6]
Attendu
[[1, 7], [12, 14]]