Data Stream as Disjoint Intervals - Problem
๐ Data Stream as Disjoint Intervals
Imagine you're receiving a continuous stream of numbers and need to efficiently track which ranges of consecutive numbers you've seen. This is a classic data structure design problem that tests your ability to maintain sorted, disjoint intervals dynamically.
The Challenge: As numbers arrive one by one, you must:
- Add each new number to your collection
- Merge overlapping or adjacent intervals
- Return all intervals sorted by their start points
Example: If you receive numbers [1, 3, 7, 2, 6], your intervals evolve like this:
- After 1:
[[1,1]] - After 3:
[[1,1], [3,3]] - After 7:
[[1,1], [3,3], [7,7]] - After 2:
[[1,3], [7,7]](merged!) - After 6:
[[1,3], [6,7]]
You need to implement the SummaryRanges class with efficient addNum() and getIntervals() methods.
Input & Output
example_1.py โ Basic Operations
$
Input:
["SummaryRanges", "addNum", "getIntervals", "addNum", "getIntervals", "addNum", "getIntervals"]
[[], [1], [], [3], [], [2], []]
โบ
Output:
[null, null, [[1,1]], null, [[1,1],[3,3]], null, [[1,3]]]
๐ก Note:
Start empty, add 1 โ [1,1], add 3 โ [1,1],[3,3], add 2 โ merges into [1,3] since 2 connects 1 and 3
example_2.py โ Multiple Merges
$
Input:
["SummaryRanges", "addNum", "addNum", "addNum", "getIntervals", "addNum", "getIntervals"]
[[], [1], [7], [3], [], [2], []]
โบ
Output:
[null, null, null, null, [[1,1],[3,3],[7,7]], null, [[1,3],[7,7]]]
๐ก Note:
Add 1,7,3 creates three separate intervals. Adding 2 merges [1,1] and [3,3] into [1,3]
example_3.py โ Adjacent Intervals
$
Input:
["SummaryRanges", "addNum", "addNum", "addNum", "getIntervals"]
[[], [1], [2], [4], []]
โบ
Output:
[null, null, null, null, [[1,2],[4,4]]]
๐ก Note:
1 and 2 are consecutive so they merge into [1,2]. 4 is separate, creating [1,2],[4,4]
Constraints
- 0 โค value โค 104
- At most 3 ร 104 calls will be made to addNum and getIntervals
- All values are non-negative integers
- getIntervals should return intervals sorted by start position
๐ก
Explanation
AI Ready
๐ก Suggestion
Tab
to accept
Esc
to dismiss
// Output will appear here after running code