352. 将数据流变为多个不相交区间
给定一个非负整数的数据流输入 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]
进阶:
如果有很多合并,并且与数据流的大小相比,不相交区间的数量很小,该怎么办?
思路
避免添加大量重复数字,且又需要有序,用set
代码
class SummaryRanges { set<int> nums; public: SummaryRanges() { } void addNum(int val) { nums.insert(val); } vector<vector<int>> getIntervals() { vector<vector<int>> result; if(nums.empty()) return result; result.push_back({*nums.begin(),*nums.begin()}); auto it=nums.begin(); advance(it, 1); for(it;it!=nums.end();it++){ int num=*it; if(num-result[result.size()-1][1]==1){ result[result.size()-1][1]=num; }else{ result.push_back({num,num}); } } return result; } };