From d582ec091d0d75763d81efaf3bce2d57592621d6 Mon Sep 17 00:00:00 2001 From: Rodolfo P A <6721075+rodoufu@users.noreply.github.com> Date: Fri, 10 Jul 2026 14:35:12 -0300 Subject: [PATCH] Create data-stream-as-disjoint-intervals.py --- .../data-stream-as-disjoint-intervals.py | 52 +++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 leetCode/design/data-stream-as-disjoint-intervals.py diff --git a/leetCode/design/data-stream-as-disjoint-intervals.py b/leetCode/design/data-stream-as-disjoint-intervals.py new file mode 100644 index 0000000..bda417e --- /dev/null +++ b/leetCode/design/data-stream-as-disjoint-intervals.py @@ -0,0 +1,52 @@ +# https://leetcode.com/problems/data-stream-as-disjoint-intervals/ +class SummaryRanges: + def __init__(self): + self.numbers = [False] * 10001 + self.intervals = None + self.max_so_far = 0 + + def addNum(self, value: int) -> None: + self.numbers[value] = True + self.intervals = None + self.max_so_far = max(self.max_so_far, value) + + def getIntervals(self) -> List[List[int]]: + if self.intervals: + return self.intervals + + self.intervals = [[]] + + last_value = 0 + for i in range(self.max_so_far + 1): + num = self.numbers[i] + + if not num: + continue + + # print(f"i: {i}, last_intervals: {self.intervals[-1]}") + match len(self.intervals[-1]): + case 0: + self.intervals[-1].append(i) + case 1: + if i != last_value + 1: + self.intervals[-1].append(last_value) + self.intervals.append([i]) + case 2: + self.intervals.append([i]) + + last_value = i + + if len(self.intervals[-1]) == 1: + self.intervals[-1].append(last_value) + + if len(self.intervals) == 1 and len(self.intervals[0]) == 0: + self.intervals = [] + + return self.intervals + + + +# Your SummaryRanges object will be instantiated and called as such: +# obj = SummaryRanges() +# obj.addNum(value) +# param_2 = obj.getIntervals()