class Solution:
def merge(self, intervals: List[List[int]]) -> List[List[int]]:
intervals.sort()
merged_intervals = []
prev = None
for current_start, current_end in intervals:
if not prev:
prev = [current_start, current_end]
continue
prev_start, prev_end = prev
if current_start <= prev_end:
prev = [prev_start, max(prev_end, current_end)]
else:
merged_intervals.append(prev)
prev = [current_start, current_end]
if prev:
merged_intervals.append(prev)
return merged_intervals
Cleaner Code
def merge(intervals):
# Step 1: Sort the intervals based on the starting time
intervals.sort(key=lambda x: x[0])
# Step 2: Initialize the list to store merged intervals
merged = [intervals[0]]
for i in range(1, len(intervals)):
# previous interval in the merged list
prev_start, prev_end = merged[-1]
# current interval to compare with
current_start, current_end = intervals[i]
# Check if the current interval overlaps with the previous one
if current_start <= prev_end:
# Merge the intervals by updating the last element of merged
merged[-1][1] = max(prev_end, current_end)
else:
# No overlap, add the current interval to the merged list
merged.append(intervals[i])
return merged