352. 将数据流变为多个不相交区间
本题是一道类似于区间合并的题目。
加入 val 分五种情况:
- 已经加过
- 孤点
- 正好可连着左侧
- 正好可连着右侧
- 正好是左右区间之间唯一的一个,即连接左右。
class SummaryRanges:
def __init__(self):
self.x = []
def addNum(self, val: int) -> None:
if val not in self.x:
bisect.insort(self.x, val)
def getIntervals(self) -> List[List[int]]:
ans = []
head = tail = -1
for i in self.x + [-1]: # 末尾添加哨兵
if head == -1:
head = tail = i # 处理开头,固定左边,扩展右边。
elif tail + 1 == i:
tail = i
else:
ans.append([head, tail])
head = tail = i # 开辟新区间
# ans.append([head, tail]) # 添加哨兵后不需要了
return ans
# Your SummaryRanges object will be instantiated and called as such:
# obj = SummaryRanges()
# obj.addNum(val)
# param_2 = obj.getIntervals()