Menu
CoddyTech

Merge Intervals

Você recebe um conjunto de intervalos, cada um representando uma faixa de números inteiros de um início a um fim. Mescle cada grupo de intervalos sobrepostos em um único intervalo que cubra todo o grupo e retorne os intervalos mesclados ordenados pelo início. Intervalos que apenas se tocam, como [1, 4] e [4, 5], são considerados sobrepostos.

Os intervalos são fornecidos em dois arrays de mesmo tamanho: o intervalo i é [starts[i], ends[i]]. Você retorna um array bidimensional, uma lista de pares [start, end].

Função

mergeIntervals(starts: integer-array, ends: integer-array) → integer-2d-array
startsinteger-array
o início de cada intervalo
endsinteger-array
o fim de cada intervalo, no mesmo índice que seu início
Retornainteger-2d-array
os intervalos mesclados como pares [start, end], ordenados por início

Restrições

  • 1 ≤ starts.length == ends.length ≤ 104
  • 0 ≤ starts[i] ≤ ends[i] ≤ 104
  • Os intervalos chegam em qualquer ordem.
  • Intervalos que apenas se tocam em uma extremidade são considerados sobrepostos.

Exemplos

Entrada
starts = [5, 1, 12, 3]ends = [7, 4, 14, 6]
Saída
[[1, 7], [12, 14]]
Explicação
Na ordem de início, [1, 4] se sobrepõe a [3, 6], que se sobrepõe a [5, 7], então os três se tornam [1, 7]. [12, 14] começa depois de 7 e permanece separado.
challenge icon

Para ir além

Os intervalos já chegam mesclados e ordenados pelo início, e você precisa adicionar um novo intervalo. Você consegue retornar a lista mesclada em O(n) tempo, sem ordenar novamente?

Redefinir código
def mergeIntervals(starts, ends):
    # Escreva o código aqui

Teste #1

Teste #2

Argumentos

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

Saída Esperada

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