Source code for tryalgo.intervals_union
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""\
Union of intervals
jill-jênn vie et christoph dürr - 2014-2019
"""
# snip{
[docs]
def intervals_union(S):
"""Union of intervals
:param S: list of pairs (low, high) defining intervals [low, high)
:returns: ordered list of disjoint intervals with the same union as S
:complexity: O(n log n)
"""
E = [(low, -1) for (low, high) in S]
E += [(high, +1) for (low, high) in S]
nb_open = 0
last = None
retval = []
for x, _dir in sorted(E):
if _dir == -1:
if nb_open == 0:
last = x
nb_open += 1
else:
nb_open -= 1
if nb_open == 0:
retval.append((last, x))
return retval
# snip}