题目描述[原题链接][https://leetcode-cn.com/problems/data-stream-as-disjoint-intervals/]
给定一个非负整数的数据流输入 a1,a2,…,an,…,将到目前为止看到的数字总结为不相交的区间列表。
例如,假设数据流中的整数为 1,3,7,2,6,…,每次的总结为:
1 | [1, 1] |
进阶:
如果有很多合并,并且与数据流的大小相比,不相交区间的数量很小,该怎么办?
算法描述
分两部分处理,首先是添加整数的时候,需要添加完数据后还是有序的,我采用的是lower_bound()
函数,即二分查找到比当前值小的最后一个数,将要添加的数val
添加到向量中,最后实现添加完的数据都是有序的;第二部就是找到区间,通过两层循环实现,遍历向量,如果前后两个数值相差1,即vec[j]-vec[j-1]<=1
跳过,否则,跳出循环,压入vec[j-1]
,更新i
的值i=j-1
,将结果添加到结果集中,遍历完整个向量结束;
C++代码
1 | class SummaryRanges { |
Java代码
1 | class SummaryRanges { |