Menu
CoddyTech

Merge Two Sorted Lists

Você recebe duas listas simplesmente encadeadas, cada uma armazenada em dois arrays de mesmo tamanho. Na primeira lista, o nó i contém o valor values1[i] e aponta para o nó next1[i]. A segunda lista funciona da mesma forma, com next2 e values2. Em ambas as listas, -1 indica o fim da lista, e a cabeça é o nó 0. Os nós não estão armazenados na ordem da lista, então siga os links.

Cada lista está ordenada em ordem não decrescente ao longo dos links. Mescle as duas em uma única lista ordenada e retorne seus valores em ordem.

Função

mergeTwoLists(next1: integer-array, values1: integer-array, next2: integer-array, values2: integer-array) → integer-array
next1integer-array
o índice do nó ao qual cada nó da primeira lista está ligado, ou -1 para o último nó
values1integer-array
o valor armazenado por cada nó da primeira lista
next2integer-array
o índice do nó ao qual cada nó da segunda lista está ligado, ou -1 para seu último nó
values2integer-array
o valor armazenado por cada nó da segunda lista
Retornainteger-array
os valores da lista mesclada, em ordem

Restrições

  • 1 ≤ L1 ≤ 2000, em que L1 é o comprimento de next1 e de values1.
  • 1 ≤ L2 ≤ 2000, em que L2 é o comprimento de next2 e de values2.
  • -1000 ≤ values1[i], values2[j] ≤ 1000
  • Cada entrada de next1 é -1 ou um índice de nó da primeira lista, e cada entrada de next2 é -1 ou um índice de nó da segunda lista.
  • Começando no nó 0, cada lista visita cada um de seus nós exatamente uma vez e, em seguida, chega a -1. Não há ciclo.
  • Seguindo seus links, cada lista está ordenada em ordem não decrescente.

Exemplos

Entrada
next1 = [2, -1, 1]values1 = [1, 6, 4]next2 = [3, 2, -1, 1]values2 = [2, 7, 9, 3]
Saída
[1, 2, 3, 4, 6, 7, 9]
Explicação
Seguindo os links, a primeira lista visita os nós 0, 2, 1 e lê 1, 4, 6; a segunda lê 2, 3, 7, 9. Pegando o menor elemento da frente a cada vez, obtemos 1, 2, 3, 4, 6, 7, 9.
challenge icon

Para ir além

Você consegue mesclar k listas ordenadas em O(N log k) tempo, em que N é o número total de nós?

Redefinir código
def mergeTwoLists(next1, values1, next2, values2):
    # Escreva o código aqui

Teste #1

Teste #2

Teste #3

Argumentos

next1 = [2, -1, 1]
values1 = [1, 6, 4]
next2 = [3, 2, -1, 1]
values2 = [2, 7, 9, 3]

Saída Esperada

[1, 2, 3, 4, 6, 7, 9]