Data Structures19 sections · 729 units
Open in Course

Interval Partitioning

Minimum groups

Partition intervals into the minimum number of groups such that no two intervals in the same group overlap.

This is equivalent to Meeting Rooms II: minimum groups = maximum overlap at any point.

function minGroups(intervals)
    events := []
    for interval in intervals
        events.add((interval.low, +1))
        events.add((interval.high, -1))

    sort events by position (ties: +1 before -1)

    maxOverlap := 0
    current := 0
    for (pos, delta) in events
        current := current + delta
        maxOverlap := max(maxOverlap, current)

    return maxOverlap

The tie-breaking rule depends on whether intervals are open or closed at endpoints. For closed intervals, process starts before ends at the same point.