Dada uma lista de intervalos, faça a união deles e reduza as sobreposições. Isso significa que as peças sobrepostas são reduzidas. ([a, b] U [c, d] = [a, d] se b > c) Assumindo todos a <b em todos os intervalos [a, b]. Implementar como uma função de uma lista de intervalos de entrada -> lista de intervalos de saída. O menor código vence. Você não pode usar nenhuma biblioteca existente.
Esclarecimentos:
- Intervalos abertos e fechados não são diferenciados.
- Intervalos para números reais, não números inteiros. (
[2, 3], [4, 5] -> [2, 3], [4, 5]) - Não há necessidade de ordenar intervalos de saída
- A ordem se as entradas não importam
- Entradas ilegais são apenas
[a, b]ondeb >= a, não tem nada a ver com a ordem dos intervalos de entrada e o número de intervalos de entrada. - Você não precisa mostrar uma mensagem de erro sobre comportamentos indefinidos
Exemplos (com linhas numéricas)
[2, 4], [7, 9] --> [2, 4], [7, 9]
234
789
-> 234 789
[1, 5], [2, 10] --> [1, 10] (overlapping [2, 5] reduced)
12345
234567890
-> 1234567890
[2, 4], [3, 6], [8, 9] -> [2, 6], [8, 9]
234
3456
89
-> 23456 89
[4, 2], [2, 2] -> (undefined behavior: against the assumption)