Enable Javascript in your browser and then refresh this page, for a much enhanced experience.
using sets solution in Clear category for Merge Intervals by marcopunteri
def merge_intervals(intervals):
intervals = [set(range(i[0],i[1]+1)) for i in intervals]
while True:
for pos, el in enumerate(intervals[1:],1):
if not el.isdisjoint(intervals[pos-1]) or min(el) == max(intervals[pos-1]) + 1:
el1, el2 = intervals.pop(pos), intervals.pop(pos-1)
intervals.insert(pos-1,el1.union(el2))
break
else:
break
return [(min(i), max(i)) for i in intervals]
if __name__ == '__main__':
#These "asserts" using only for self-checking and not necessary for auto-testing
assert merge_intervals([(1, 4), (2, 6), (8, 10), (12, 19)]) == [(1, 6), (8, 10), (12, 19)], "First"
assert merge_intervals([(1, 12), (2, 3), (4, 7)]) == [(1, 12)], "Second"
assert merge_intervals([(1, 5), (6, 10), (10, 15), (17, 20)]) == [(1, 15), (17, 20)], "Third"
print('Done! Go ahead and Check IT')
Jan. 3, 2022