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;
    }
};
全部评论

相关推荐

09-01 11:31
门头沟学院 Java
buul:七牛云的吧,感觉想法是好的,但是大家没那么多时间弄他这个啊。。。不知道的还以为他是顶尖大厂呢还搞比赛抢hc,只能说应试者的痛苦考察方是无法理解的,他们只会想一出是一出
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务