Не смотрите на интервалы, смотрите только на их концы.
У вас есть куча начальных моментов и куча конечных моментов.Представьте, что начальные моменты - красные, а конечные - синие.Или представьте, что начальные моменты - это открывающие фигурные скобки, а конечные моменты - закрывающие фигурные скобки.
Поместите их все вместе в список.Сортируйте список от самого раннего к последнему, игнорируя цвет.
Теперь возьмите с собой счетчик, установленный на ноль, и пройдите по списку.Когда вы увидите красный момент, увеличьте счетчик.Когда вы увидите синий момент, уменьшите счетчик.Когда значение счетчика меняется от 0 до 1, выведите «start» и текущее время.Когда значение счетчика изменяется от 1 до 0, выведите «end» и текущее время.Если значение счетчика падает ниже 0, выведите «Хьюстон, у нас проблема».Вы должны закончить со своим счетчиком в 0 и кучей хороших непересекающихся интервалов.
Это старый добрый алгоритм подсчета фигурных скобок.
Иллюстрация.
A bunch of overlapping intervals:
(-------------------)
(----------------------)
(---)
(---------------------)
(-----------------)
A bunch of interval ends:
(-----(-------------)-(-----)----------------) (----(---)--------)