पाठ 21 / 26

Interval Problems

Sort by start, then sweep.

Merge and count overlaps

Most interval problems start by sorting by start time. Merging overlapping intervals extends the last merged interval when the next one starts before it ends. Counting meeting rooms keeps a min-heap of end times: a room is reused when the earliest end is not after the next start. Clarify whether touching intervals ([1,4] and [4,5]) overlap.

Merging intervals and counting rooms, run

I ran this with Python 3.12.3 (standard library only). Overlapping [1,3] and [2,6] merge; touching intervals merge because the code uses <=; three meetings need 2 rooms and two separate meetings need 1.

# Intervals: merge overlaps and count rooms needed
import heapq

def merge(intervals):
    out = []
    for s, e in sorted(intervals):
        if out and s <= out[-1][1]:
            out[-1][1] = max(out[-1][1], e)
        else:
            out.append([s, e])
    return out

def min_rooms(meetings):
    ends = []                             # min-heap of end times in use
    for s, e in sorted(meetings):
        if ends and ends[0] <= s:
            heapq.heappop(ends)           # reuse a room that is free
        heapq.heappush(ends, e)
    return len(ends)

print(merge([[1, 3], [2, 6], [8, 10], [15, 18]]))
print(merge([[1, 4], [4, 5]]))
print(min_rooms([(0, 30), (5, 10), (15, 20)]), min_rooms([(7, 10), (2, 4)]))

Output:

[[1, 6], [8, 10], [15, 18]]
[[1, 5]]
2 1

Ask about touching endpoints

Whether [1,4] and [4,5] overlap changes < to <=; ask instead of guessing.

त्वरित जाँच: What is the usual first step in interval problems?

  • Reverse the list
  • Sort intervals by start time
  • Convert to a graph
  • Use binary search immediately
Answer

Sort intervals by start time — Order makes a single sweep possible.