Published on

leetcode-352 Data Stream as Disjoint Intervals

Authors
  • avatar
    Name
    Gene Zhang
    Twitter

[352] Data Stream as Disjoint Intervals

Key Concept: TreeMap/Ordered Dict for Interval Management - Maintain sorted intervals and merge adjacent ones when adding new numbers.

# Design a data structure that accepts a stream of integers and retrieves
# the current list of disjoint intervals.

from sortedcontainers import SortedDict

class SummaryRanges:
    def __init__(self):
        self.intervals = SortedDict()

    def addNum(self, value: int) -> None:
        if value in self.intervals:
            return

        left = self.intervals.get(value - 1)
        right = self.intervals.get(value + 1)

        if left and right:
            # Merge three intervals
            self.intervals[left] = right
            del self.intervals[value + 1]
        elif left:
            # Extend left interval
            self.intervals[left] = value
        elif right:
            # Extend right interval
            self.intervals[value] = right
            del self.intervals[value + 1]
        else:
            # New interval
            self.intervals[value] = value

    def getIntervals(self) -> List[List[int]]:
        return [[start, end] for start, end in self.intervals.items()]

# Time: addNum O(log n), getIntervals O(n); Space: O(n)
# AirBnB: Tests interval management and data structure design