题目
给定一个非负整数的数据流输入 a1,a2,…,an,…,将到目前为止看到的数字总结为不相交的区间列表。
例如,假设数据流中的整数为 1,3,7,2,6,…,每次的总结为:
[1, 1]
[1, 1], [3, 3]
[1, 1], [3, 3], [7, 7]
[1, 3], [7, 7]
[1, 3], [6, 7]
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/data-stream-as-disjoint-intervals
解题思路
- 对所有数据进行排序,顺序从小到大。
- 对数据进行遍历,如果数据是连续的,则继续进行遍历,直至遇到相连数据值不是连续的,则认为是一个区间,并记录,以及开始新的区间。直至遍历完整个数据集。
代码
class SummaryRanges(object):
def __init__(self):
"""
Initialize your data structure here.
"""
self.num_set = set()
def addNum(self, val):
"""
:type val: int
:rtype: None
"""
self.num_set.add(val)
def getIntervals(self):
"""
:rtype: List[List[int]]
"""
sorted_num = sorted(self.num_set)
start = 0
intervals = list()
for index in range(len(sorted_num)):
if index == len(sorted_num) - 1:
end = index
sub_interval = [sorted_num[start], sorted_num[end]]
intervals.append(sub_interval)
return intervals
if sorted_num[index] + 1 != sorted_num[index + 1]:
end = index
sub_interval = [sorted_num[start], sorted_num[end]]
intervals.append(sub_interval)
start = index + 1
return intervals
其他
代码的时间以及空间效率不算高:
REF
https://leetcode-cn.com/problems/data-stream-as-disjoint-intervals/