56 Merge Intervals

Last updated

Last updated
class Interval:
def __init__(self, s=0, e=0):
self.start = s
self.end = e
class Solution:
def merge(self, intervals):
"""
:type intervals: List[Interval]
:rtype: List[Interval]
"""
if not intervals:
return []
intervals.sort(key=lambda i: i.start)
merged_intervals = []
cur_start = intervals[0].start
cur_end = intervals[0].end
for i, interval in enumerate(intervals[1:], 1):
if cur_start <= interval.start <= cur_end and \
cur_start <= interval.end <= cur_end:
continue
if cur_start <= interval.start <= cur_end:
cur_end = interval.end
else:
merged_intervals.append(Interval(cur_start, cur_end))
cur_start = interval.start
cur_end = interval.end
merged_intervals.append(Interval(cur_start, cur_end))
return merged_intervals
def print_intervals(intervals):
for i in intervals:
print('(', i.start, i. end, ')', end='')
print('\n')
obj = Solution()
print_intervals(obj.merge([Interval(1, 4), Interval(2, 3)])) # ( 1 4 )
print_intervals(obj.merge([])) # ( )
print_intervals(obj.merge([Interval(5, 10)])) # ( 5 10 )
print_intervals(obj.merge([Interval(1, 3), Interval(2, 10), Interval(8, 15)])) # ( 1 15 )
print_intervals(obj.merge([Interval(1, 3), Interval(2, 6), Interval(8, 10), Interval(15, 18)])) # ( 1 6 )( 8 10 )( 15 18 )
print_intervals(obj.merge([Interval(1, 3), Interval(4, 6), Interval(7, 10)])) # ( 1 3 )( 4 6 )( 7 10 )