给定一个非负整数的数据流输入 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;
    }
};