Biorąc pod uwagę listę interwałów, wykonaj ich połączenie i zmniejsz nakładanie się. Oznacza to, że nakładające się części są zmniejszone. ( [a, b] U [c, d] = [a, d]if b > c) Zakładając wszystkie a <b we wszystkich przedziałach [a, b]. Implementuj jako funkcję listy interwałów wejściowych -> lista interwałów wyjściowych. Najkrótszy kod wygrywa. Nie możesz używać żadnych istniejących bibliotek.
Wyjaśnienia:
- Przedziały otwarte i zamknięte nie są rozróżniane.
- Przedziały dla liczb rzeczywistych, a nie liczb całkowitych. (
[2, 3], [4, 5] -> [2, 3], [4, 5]) - Nie ma potrzeby sortowania przedziałów wyjściowych
- Kolejność, jeśli dane wejściowe nie mają znaczenia
- Wejścia są nielegalne tylko
[a, b]gdzieb >= a, to nie ma nic wspólnego z porządkiem odstępach wejściowych i liczby przedziałów wejściowych. - Nie musisz wyświetlać komunikatu o błędzie dotyczącym niezdefiniowanych zachowań
Przykłady (z liniami liczbowymi)
[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)