Menu
CoddyTech

Insert Interval

MedioIntervalospython iconjava iconcpp iconc iconjs icon+10

Recibes una lista de intervalos ordenados por inicio, dados como dos matrices de la misma longitud: el intervalo i es [starts[i], ends[i]]. Ninguno de ellos se superpone ni se toca. También recibes un intervalo nuevo, [newStart, newEnd]. Insértalo, combínalo con todos los intervalos con los que se superponga o toque y devuelve todos los intervalos como una matriz 2D de pares [start, end], ordenados por inicio.

Dos 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 en uno solo. [1, 2] y [3, 4] no comparten ningún punto, así que se mantienen 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, haciendo coincidir los inicios
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 quedan como están.

lock icon+20 pruebas ocultas al enviar

challenge icon

Para ir más allá

Supongamos que insertas muchos intervalos nuevos, uno tras otro, en la misma lista. ¿Cómo almacenarías los intervalos 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í
Casos de prueba

Caso 1

Caso 2

Caso 3

Entrada

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

Esperado

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