Menu
CoddyTech

Merge k Sorted Lists

DifícilHeapLista ligadapython iconjava iconcpp iconc iconjs icon+10

Você recebe k listas de números inteiros como linhas de lists. Cada linha está ordenada em ordem não decrescente, as linhas podem ter comprimentos diferentes e nenhuma linha está vazia.

Mescle-as em uma única lista que contenha todos os valores de todas as linhas, ordenados em ordem não decrescente, e retorne essa lista. Um valor que aparece várias vezes, em uma linha ou em várias, aparece essa mesma quantidade de vezes no resultado.

Função

mergeKLists(lists: integer-2d-array) → integer-array
listsinteger-2d-array
as listas ordenadas, uma por linha, possivelmente de comprimentos diferentes
Retornainteger-array
todos os valores de todas as linhas, em uma única lista ordenada

Restrições

  • 1 ≤ lists.length ≤ 104
  • 1 ≤ lists[i].length, e todas as linhas juntas contêm no máximo 104 valores
  • -104 ≤ lists[i][j] ≤ 104
  • Cada linha está ordenada em ordem não decrescente.

Exemplos

Entrada
lists = [[2, 6, 9], [1, 4, 10], [3, 5]]
Saída
[1, 2, 3, 4, 5, 6, 9, 10]
Explicação
O menor valor no geral é 1, o primeiro valor da segunda linha. Depois dele, as linhas começam com 2, 4 e 3, então 2 vem em seguida, e assim por diante. A terceira linha termina depois de 5, deixando 6, 9 e 10 no final.

lock icon+14 testes ocultos ao enviar

challenge icon

Para ir além

Encontre o menor intervalo [a, b] que contenha pelo menos um valor de cada linha. O mesmo heap com os primeiros elementos de cada linha, mais o maior primeiro elemento encontrado até então, pode encontrá-lo em O(N log k)?

Redefinir código
def mergeKLists(lists):
    # Escreva o código aqui
Casos de teste

Caso 1

Caso 2

Caso 3

Entrada

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

Esperado

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