352. Data Stream as Disjoint Intervals

https://leetcode.com/problems/data-stream-as-disjoint-intervals/

addNum:

Use PriorityQueue to sort the order of all intervals first based on their interval.start

getIntervals:

merge intervals from smallest interval.start

import heapq
class SummaryRanges:

    def __init__(self):
        """
        Initialize your data structure here.
        """
        self.intervals = []
        self.seen = set()

    def addNum(self, val: int) -> None:
        if val not in self.seen:
            heapq.heappush(self.intervals,[val,val])
            self.seen.add(val)
        
        
        

    def getIntervals(self) -> List[List[int]]:
        stack = []
        while self.intervals:
            curr = heapq.heappop(self.intervals)
            if not stack:
                stack.append(curr)
            else:
                #merge
                if curr[0] == stack[-1][1] + 1:
                    prev = stack.pop()
                    curr = [prev[0],curr[1]]
                    stack.append(curr)
                else:
                    stack.append(curr)
        self.intervals = stack
        return self.intervals

Last updated

Was this helpful?