Intervals
Use when: merging overlapping ranges, inserting into sorted intervals, detecting conflicts, minimum coverage.
Signal words: merge intervals, insert interval, meeting rooms, non-overlapping, overlapping pairs.
Two Intervals Overlap When
a.start <= b.end AND b.start <= a.end
Equivalently: they do NOT overlap when a.end < b.start OR b.end < a.start.
Merge Intervals
intervals.sort(key=lambda x: x[0])
merged = [intervals[0]]
for start, end in intervals[1:]:
if start <= merged[-1][1]:
merged[-1][1] = max(merged[-1][1], end) # extend
else:
merged.append([start, end])Insert Interval
Three phases: add all intervals ending before new one, merge overlapping, add the rest.
Meeting Rooms (can attend all?)
Sort by start, check if any intervals[i].start < intervals[i-1].end.
Minimum Meeting Rooms (how many rooms needed?)
Use a min-heap of end times - greedily reuse the room that frees up earliest.