Merge Intervals
Um intervalo é uma faixa de números inteiros com um início e um fim. Intervalos que compartilham pelo menos um ponto pertencem juntos, assim como intervalos que apenas se tocam: [1, 4] e [4, 5] se tornam [1, 5]. O objetivo é substituir cada grupo de intervalos sobrepostos por um único intervalo que cubra todo o grupo.
O truque está na ordem. Depois que os intervalos são ordenados pelo início, tudo o que se sobrepõe ao intervalo que você está construindo vem logo depois dele. Percorra a lista ordenada e mantenha o último intervalo mesclado: se o próximo início for menor ou igual ao seu fim, estenda o fim; caso contrário, há uma lacuna de verdade, então começa um novo intervalo. A ordenação custa O(n log n), e a varredura é uma única passagem.
Escreva uma função chamada mergeIntervals que recebe dois arrays de inteiros, starts e ends, e retorna os intervalos mesclados.
Os intervalos são fornecidos como dois arrays porque nem todas as linguagens aqui aceitam um array 2D como entrada: o intervalo i é [starts[i], ends[i]], e os dois arrays têm o mesmo comprimento. Os intervalos não estão ordenados.
Mescle cada grupo de intervalos sobrepostos. Intervalos que apenas se tocam em uma extremidade também são considerados sobrepostos. Retorne os intervalos mesclados como um array 2D [[start, end], ...], ordenados pelo início.
Por exemplo, starts = [5, 1, 12, 3] e ends = [7, 4, 14, 6] descrevem [5, 7], [1, 4], [12, 14] e [3, 6], que se mesclam em [[1, 7], [12, 14]].
Restrições: 1 <= starts.length == ends.length <= 10^4, 0 <= starts[i] <= ends[i] <= 10^4.
Função
- arg1integer-array
- arg2integer-array
- Retornainteger-2d-array
Exemplos
- Entrada
- arg1 = [5, 1, 12, 3]arg2 = [7, 4, 14, 6]
- Saída
- [[1, 7], [12, 14]]
- Entrada
- arg1 = [6, 1]arg2 = [9, 6]
- Saída
- [[1, 9]]
+12 testes ocultos ao enviar
Dicas
Abra uma de cada vez. Cada uma revela um pouco mais.
Primeiro, associe cada início ao seu fim, para que você trabalhe com intervalos completos em vez de dois arrays separados.
Ordene os intervalos pelo início. Depois disso, um intervalo só pode se sobrepor ao grupo imediatamente anterior, nunca a um grupo mais distante.
Percorra os intervalos ordenados mantendo o último intervalo mesclado. Se o próximo início for menor ou igual ao seu fim, defina seu fim como o maior dos dois fins. Caso contrário, esse grupo está concluído e o próximo intervalo inicia um novo.
Em breve, uma explicação completa deste problema.
Problemas parecidos
Problemas que usam as mesmas ideias. Resolver dois ou três é o que fixa um padrão.
Python
def mergeIntervals(starts, ends):
# Escreva o código aquiCaso 1
Caso 2
Entrada
arg1 = [5, 1, 12, 3] arg2 = [7, 4, 14, 6]
Esperado
[[1, 7], [12, 14]]