352将数据流变为多个不相交区间(set集合)

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版权协议,转载请附上原文出处链接和本声明。