Menu
CoddyTech

Merge k Sorted Lists

DifficileTasListe chaînéepython iconjava iconcpp iconc iconjs icon+10

Vous recevez k listes d’entiers correspondant aux lignes de lists. Chaque ligne est triée par ordre non décroissant, les lignes peuvent avoir des longueurs différentes et aucune ligne n’est vide.

Fusionnez-les en une seule liste contenant chaque valeur de toutes les lignes, triée par ordre non décroissant, puis retournez-la. Une valeur présente plusieurs fois, dans une ou plusieurs lignes, apparaît autant de fois dans le résultat.

Fonction

mergeKLists(lists: integer-2d-array) → integer-array
listsinteger-2d-array
les listes triées, une par ligne, de longueurs éventuellement différentes
Renvoieinteger-array
chaque valeur de chaque ligne, dans une seule liste triée

Contraintes

  • 1 ≤ lists.length ≤ 104
  • 1 ≤ lists[i].length, et toutes les lignes réunies contiennent au maximum 104 valeurs
  • -104 ≤ lists[i][j] ≤ 104
  • Chaque ligne est triée par ordre non décroissant.

Exemples

Entrée
lists = [[2, 6, 9], [1, 4, 10], [3, 5]]
Sortie
[1, 2, 3, 4, 5, 6, 9, 10]
Explication
Les lignes commencent par 2, 1 et 3, donc 1 vient en premier. Les premiers éléments sont ensuite 2, 4 et 3, donc 2 suit, et ainsi de suite. La troisième ligne s'arrête après 5, laissant 6, 9 et 10.
challenge icon

Pour aller plus loin

Trouvez l’intervalle le plus petit [a, b] contenant une valeur de chaque ligne. Un tas des têtes de ligne, associé à la plus grande tête, permet-il d’y parvenir en O(N log k) ?

Réinitialiser le code
def mergeKLists(lists):
    # Écrivez le code ici

Test #1

Test #2

Test #3

Argument

lists = [[2, 6, 9], [1, 4, 10], [3, 5]]

Résultat attendu

[1, 2, 3, 4, 5, 6, 9, 10]