0
点赞
收藏
分享

微信扫一扫

LeetCode题解(0352):将数据流变为多个不相交区间(Python)


题目:​​原题链接​​(困难)

标签:有序映射、二分查找

解法

时间复杂度

空间复杂度

执行用时

Ans 1 (Python)

152ms (65.56%)

Ans 2 (Python)

Ans 3 (Python)

解法一:

import sortedcontainers


class SummaryRanges:
def __init__(self):
self.seg = sortedcontainers.SortedList()

def addNum(self, val: int) -> None:
if self.seg:
left = self.seg.bisect_left([val, val])
right = self.seg.bisect_right([val, val])
if left == right and left > 0:
left -= 1
if ((left < len(self.seg) and self.seg[left][1] == val - 1) and
(right < len(self.seg) and self.seg[right][0] == val + 1)): # 左右正好连接一个两个区间
new = [self.seg[left][0], self.seg[right][1]]
self.seg.pop(right)
self.seg.pop(left)
self.seg.add(new)
elif left < len(self.seg) and self.seg[left][1] == val - 1: # 左侧连接一个区间
new = [self.seg[left][0], self.seg[left][1] + 1]
self.seg.pop(left)
self.seg.add(new)
elif right < len(self.seg) and self.seg[right][0] == val + 1: # 右侧连接一个区间
new = [self.seg[right][0] - 1, self.seg[right][1]]
self.seg.pop(right)
self.seg.add(new)
elif (left < len(self.seg) and self.seg[left][0] <= val <= self.seg[left][1] or
(right < len(self.seg) and self.seg[right][0] <= val <= self.seg[right][1])): # 包含在一个区间内
return
else:
self.seg.add([val, val])
else:
self.seg.add([val, val])

def getIntervals(self) -> List[List[int]]:
return list(self.seg)


举报

相关推荐

不相交区间问题(贪心算法)

0 条评论