Menu
CoddyTech

Non-overlapping Intervals

Você recebe uma lista de intervalos em dois arrays: o intervalo i vai de starts[i] a ends[i]. Remova o menor número possível de intervalos para que nenhum dos intervalos restantes se sobreponha. Dois intervalos que apenas se tocam, quando um termina exatamente no ponto em que o outro começa, não se sobrepõem.

Escreva uma função chamada eraseOverlapIntervals que retorne o menor número de intervalos que você precisa remover.

Função

eraseOverlapIntervals(starts: integer-array, ends: integer-array) → integer
startsinteger-array
o início de cada intervalo
endsinteger-array
o fim de cada intervalo, no mesmo índice que seu início
Retornainteger
o menor número de intervalos a remover para que os restantes não se sobreponham

Restrições

  • 1 ≤ starts.length == ends.length ≤ 5000
  • -5 × 104 ≤ starts[i] < ends[i] ≤ 5 × 104
  • Os intervalos não estão ordenados. Dois intervalos podem ser idênticos.

Exemplos

Entrada
starts = [3, 1, 5, 2]ends = [6, 4, 7, 3]
Saída
2
Explicação
Na ordem de início, os intervalos são [1,4], [2,3], [3,6] e [5,7]. Mantenha [2,3] e [3,6], que apenas se tocam, e remova os outros 2. Não é possível manter três: [1,4] se sobrepõe a [2,3] e [3,6] se sobrepõe a [5,7], e quaisquer três dos quatro contêm um desses pares.

lock icon+17 testes ocultos ao enviar

challenge icon

Para ir além

Suponha que cada intervalo também tenha um valor e que você queira obter o maior valor total entre os intervalos que não se sobrepõem. Manter o intervalo que termina primeiro ainda funciona? O que você usaria em vez disso?

Redefinir código
def eraseOverlapIntervals(starts, ends):
    # Escreva o código aqui
Casos de teste

Caso 1

Caso 2

Caso 3

Entrada

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

Esperado

2