Menu
CoddyTech

Non-overlapping Intervals

Recibes una lista de intervalos en forma de dos arreglos: el intervalo i va desde starts[i] hasta ends[i]. Elimina la menor cantidad posible de intervalos para que ninguno de los que queden se superponga. Dos intervalos que solo se tocan, cuando uno termina exactamente en el punto donde empieza el otro, no se superponen.

Escribe una función llamada eraseOverlapIntervals que devuelva la menor cantidad de intervalos que tienes que eliminar.

Función

eraseOverlapIntervals(starts: integer-array, ends: integer-array) → integer
startsinteger-array
el inicio de cada intervalo
endsinteger-array
el final de cada intervalo, en el mismo índice que su inicio
Devuelveinteger
el menor número de intervalos que hay que eliminar para que los restantes no se solapen

Restricciones

  • 1 ≤ starts.length == ends.length ≤ 5000
  • -5 × 104 ≤ starts[i] < ends[i] ≤ 5 × 104
  • Los intervalos no están ordenados. Dos intervalos pueden ser idénticos.

Ejemplos

Entrada
starts = [3, 1, 5, 2]ends = [6, 4, 7, 3]
Salida
2
Explicación
En orden de inicio, los intervalos son [1,4], [2,3], [3,6] y [5,7]. Conserva [2,3] y [3,6], que solo se tocan, y elimina los otros 2. No puedes conservar tres: [1,4] se superpone con [2,3] y [3,6] se superpone con [5,7], y cualesquiera tres de los cuatro contienen uno de esos pares.

lock icon+17 pruebas ocultas al enviar

challenge icon

Para ir más allá

Supón que cada intervalo también tiene un valor y quieres obtener el mayor valor total entre los intervalos que no se superponen. ¿Sigue funcionando conservar el intervalo que termina primero? ¿Qué usarías en su lugar?

Restablecer código
def eraseOverlapIntervals(starts, ends):
    # Escribe el código aquí
Casos de prueba

Caso 1

Caso 2

Caso 3

Entrada

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

Esperado

2