d1_end), (d2_start, d2_end)]. Отрезки могут пересекаться и/или соприкасаться. Необходимо объединить пересекающиеся отрезки.
Я не долго думая придумал решение O(n^3) (перебираем все пары, если они пересекаются, то убираем оба элемента, вставлям объединение и начинаем всё сначала), но это как-то тупо выглядит. Может есть более умный алгоритм?
Sort по началу и вперёд в один проход
orig.sort() res=[] cur = None for n in orig: if cur is None: cur = n continue if n[0]<=cur[1]: cur = (cur[0], max(cur[1], n[1])) continue res.append(cur) cur=n res.append(cur)
Библиотеки можно использовать?
Обсуждают сегодня