1、题目描述
给定一个非负整数的数据流输入 a1,a2,…,an,…,将到目前为止看到的数字总结为不相交的区间列表。
进阶:如果有很多合并,并且与数据流的大小相比,不相交区间的数量很小,该怎么办?
2、示例
假设数据流中的整数为 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]
3、题解
基本思想:把每个插入值放在一个set里,返回的列表就每次遍历set
#include<vector>
#include<iostream>
#include<algorithm>
#include<set>
using namespace std;
class SummaryRanges {
public:
/** Initialize your data structure here. */
SummaryRanges() {
//基本思想:把每个插入值放在一个set里,返回的列表就每次遍历set
}
void addNum(int val) {
nums.insert(val);
}
vector<vector<int>> getIntervals() {
vector<vector<int>> res;
auto iter=nums.begin();
while(iter!=nums.end())
{
auto left=iter,right=iter;
right++;
while(right!=nums.end()&&*left+1==*right)
{
left++;
right++;
}
res.push_back({*iter,*left});
iter=right;
}
return res;
}
private:
set<int> nums;
};
int main()
{
SummaryRanges* obj = new SummaryRanges();
vector<int> nums{1,3,7,2,6};
for(auto num:nums)
obj->addNum(num);
vector<vector<int>> res = obj->getIntervals();
for_each(res.begin(),res.end(),[](vector<int> v){cout<<v[0]<<" "<<v[1]<<endl;});
return 0;
}
版权声明:本文为Revendell原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。