Merge overlapping meeting intervals

Python · Python · intermediate · greenfield

Sorts the intervals by start and folds each into the previous one when they overlap, extending the end. Checked it against a couple of overlapping cases and it collapsed them correctly.

Used to compact a room's booking list before rendering the day view. A meeting from 13:00-14:00 and the next from 14:00-15:00 are back-to-back, not overlapping, and must stay as two separate blocks; only genuinely overlapping bookings collapse into one.

Requirements

Files touched

--- meetings/intervals.py
+def merge_meetings(intervals: list[tuple[int, int]]) -> list[tuple[int, int]]:
+    if not intervals:
+        return []
+
+    sorted_intervals = sorted(intervals, key=lambda x: x[0])
+    merged = [list(sorted_intervals[0])]
+
+    for current_start, current_end in sorted_intervals[1:]:
+        last_end = merged[-1][1]
+
+        if current_start <= last_end:
+            merged[-1][1] = max(last_end, current_end)
+        else:
+            merged.append([current_start, current_end])
+
+    return [tuple(m) for m in merged]
+

Review this PR

Python practice