Menu
CoddyTech

Insert Interval

MedioIntervalospython iconjava iconcpp iconc iconjs icon+10

Recibes intervalos ordenados por inicio en dos arreglos: el intervalo i es [starts[i], ends[i]], y no hay dos que se superpongan ni se toquen. Inserta el nuevo intervalo [newStart, newEnd], combínalo con todos los intervalos que se superpongan o se toquen con él y devuelve todos los intervalos como pares [start, end] ordenados por inicio.

Los intervalos se tocan cuando uno termina donde empieza el otro, como ocurre con [2, 4] y [4, 8], y los intervalos que se tocan se combinan. [1, 2] y [3, 4] no comparten ningún punto, así que permanecen separados.

Función

insertInterval(starts: integer-array, ends: integer-array, newStart: integer, newEnd: integer) → integer-2d-array
startsinteger-array
el inicio de cada intervalo, en orden creciente
endsinteger-array
el final de cada intervalo, los inicios correspondientes
newStartinteger
el inicio del intervalo que se va a insertar
newEndinteger
el final del intervalo que se va a insertar
Devuelveinteger-2d-array
los intervalos después de la inserción como pares [start, end], ordenados por start

Restricciones

  • 1 ≤ starts.length == ends.length ≤ 2000
  • 0 ≤ starts[i] ≤ ends[i] ≤ 105
  • ends[i] < starts[i+1]: los intervalos están ordenados por inicio, y ninguno se superpone ni toca a otro.
  • 0 ≤ newStart ≤ newEnd ≤ 105

Ejemplos

Entrada
starts = [1, 5, 10, 15]ends = [3, 7, 12, 18]newStart = 6newEnd = 11
Salida
[[1, 3], [5, 12], [15, 18]]
Explicación
[6, 11] se superpone con [5, 7] y [10, 12], así que los tres se convierten en [5, 12]. [1, 3] termina antes de 6 y [15, 18] empieza después de 12, así que ambos se mantienen.
challenge icon

Para ir más allá

Si insertas muchos intervalos uno tras otro, ¿cómo los almacenarías para que cada inserción cueste O(log n) más un paso por cada intervalo antiguo que absorba?

Restablecer código
def insertInterval(starts, ends, newStart, newEnd):
    # Escribe el código aquí

Prueba #1

Prueba #2

Prueba #3

Argumentos

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

Salida Esperada

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