Merge overlapping intervals
This problem was asked by Snapchat.
Given a list of possibly overlapping intervals, return a new list of intervals where all overlapping intervals have been merged.
The input list is not necessarily ordered in any way.
For example, given [(1, 3), (5, 8), (4, 10), (20, 25)], you should return [(1, 3), (4, 10), (20, 25)].
My Solution(Python):
def mergeIntervals(intervals: 'list(tuples)') -> 'list(tuples)':
intervals = sorted(intervals, key=lambda x: x[0])
merged = [intervals[0]]
for i in range(1, len(intervals)):
if intervals[i][0]<merged[-1][1]:
last_interval = merged.pop()
merged.append((last_interval[0], max(last_interval[1], intervals[i][1])))
else:
merged.append(intervals[i])
return merged
print(mergeIntervals([(1, 3), (5, 8), (4, 10), (20, 25)]))
print(mergeIntervals([(6,8), (1,9), (2,4), (4,7)]))