Menu
CoddyTech

Insert Interval

MédioIntervalospython iconjava iconcpp iconc iconjs icon+10

Você recebe intervalos ordenados pelo início em dois arrays: o intervalo i é [starts[i], ends[i]], e não há dois intervalos que se sobreponham ou se toquem. Insira o novo intervalo [newStart, newEnd], mescle-o com todos os intervalos com os quais ele se sobrepõe ou se toca e retorne todos os intervalos como pares [start, end] ordenados pelo início.

Os intervalos se tocam quando um termina onde o outro começa, como acontece com [2, 4] e [4, 8], e intervalos que se tocam são mesclados. [1, 2] e [3, 4] não compartilham nenhum ponto, então permanecem separados.

Função

insertInterval(starts: integer-array, ends: integer-array, newStart: integer, newEnd: integer) → integer-2d-array
startsinteger-array
o início de cada intervalo, em ordem crescente
endsinteger-array
o final de cada intervalo, correspondendo aos inícios
newStartinteger
o início do intervalo a ser inserido
newEndinteger
o final do intervalo a inserir
Retornainteger-2d-array
os intervalos após a inserção como pares [start, end], ordenados por start

Restrições

  • 1 ≤ starts.length == ends.length ≤ 2000
  • 0 ≤ starts[i] ≤ ends[i] ≤ 105
  • ends[i] < starts[i+1]: os intervalos estão ordenados pelo início, e nenhum par deles se sobrepõe ou se toca.
  • 0 ≤ newStart ≤ newEnd ≤ 105

Exemplos

Entrada
starts = [1, 5, 10, 15]ends = [3, 7, 12, 18]newStart = 6newEnd = 11
Saída
[[1, 3], [5, 12], [15, 18]]
Explicação
[6, 11] se sobrepõe a [5, 7] e [10, 12], então os três se tornam [5, 12]. [1, 3] termina antes de 6 e [15, 18] começa depois de 12, então ambos permanecem.
challenge icon

Para ir além

Se você inserir muitos intervalos um após o outro, como os armazenaria para que cada inserção custe O(log n) mais uma etapa por intervalo antigo que ela absorve?

Redefinir código
def insertInterval(starts, ends, newStart, newEnd):
    # Escreva o código aqui

Teste #1

Teste #2

Teste #3

Argumentos

starts = [1, 5, 10, 15]
ends = [3, 7, 12, 18]
newStart = 6
newEnd = 11

Saída Esperada

[[1, 3], [5, 12], [15, 18]]