from typing import List
class Interval:
def __init__(self, start: int, end: int):
self.start = start
self.end = end
def __repr__(self):
return f'[{self.start},{self.end}]'
def merge_intervals(intervals: List[Interval]) -> List[Interval]:
if not intervals:
return []
# Sort intervals by start time
intervals.sort(key=lambda x: x.start)
merged = [intervals[0]]
for current in intervals[1:]:
last = merged[-1]
if current.start <= last.end:
# Overlapping intervals, merge them
last.end = max(last.end, current.end)
else:
# No overlap, add current interval
merged.append(current)
return merged
# Driver code using dry_run input
intervals = [Interval(1,5), Interval(6,8), Interval(4,7)]
merged = merge_intervals(intervals)
print('Merged intervals:', ' '.join(map(str, merged)))intervals.sort(key=lambda x: x.start)
Sort intervals by their start time to process in order
Initialize merged list with first interval as base
for current in intervals[1:]:
Iterate over remaining intervals to check overlap
if current.start <= last.end:
Check if current interval overlaps with last merged interval
last.end = max(last.end, current.end)
Merge intervals by extending the end if overlapping
Add non-overlapping interval to merged list