• LeetCode-352 Data Stream as Disjoint Intervals


    题目描述

    Given a data stream input of non-negative integers a1, a2, ..., an, ..., summarize the numbers seen so far as a list of disjoint intervals.

    For example, suppose the integers from the data stream are 1, 3, 7, 2, 6, ..., then the summary will be:

    [1, 1]
    [1, 1], [3, 3]
    [1, 1], [3, 3], [7, 7]
    [1, 3], [7, 7]
    [1, 3], [6, 7]

    题目大意

    将给定地一串正整数数字输入,整合成不相交的区间表示。

    示例

    如题目所示。

    解题思路

    LeetCode@Tiejun主要利用set<vector<int>>数据结构来表示不同的区间表示,每次插入新的数字时,遍历set查找可以合并的区间,并同时删除该区间,最后将整合好的区间插入set。

    复杂度分析

    时间复杂度:O(N)

    空间复杂度:O(N)

    代码

    class SummaryRanges {
    public:
        /** Initialize your data structure here. */
        SummaryRanges() {
            
        }
        
        void addNum(int val) {
            // 初始化新的区间,以新插入的数字为区间的中心点
            vector<int> merge = {val, val};
            // 遍历set,寻找可以合并的区间
            for (auto it = intervals.begin(); it != intervals.end();) {
                // 如果该区间不与新区间相连,则跳过
                if (it->front() - 1 > merge.back() || it->back() + 1 < merge.front())
                    ++it;
                // 否则将两个区间合并
                else {
                    merge.front() = min(it->front(), merge.front());
                    merge.back() = max(it->back(), merge.back());
                    it = intervals.erase(it);
                }
            }
            // 插入新区间
            intervals.insert(merge);
        }
        
        vector<vector<int>> getIntervals() {
            // 将set中的所有元素返回
            return vector<vector<int> >(intervals.begin(), intervals.end());
        }
        
    private:
        set<vector<int> > intervals;
    };
    
    /**
     * Your SummaryRanges object will be instantiated and called as such:
     * SummaryRanges* obj = new SummaryRanges();
     * obj->addNum(val);
     * vector<vector<int>> param_2 = obj->getIntervals();
     */
  • 相关阅读:
    ROS工业机器人 ROSI Kinetic培训课程
    伺服电机电流、速度、位置环控制
    人工智能入门书单
    更新 Ubuntu 系统,避免报错「校验和不符」
    arduino+16路舵机驱动板连接测试
    Visual SLAM算法:2010年至2016年的回顾
    roslink
    java——自动装箱拆箱
    java_四大流
    Java反射
  • 原文地址:https://www.cnblogs.com/heyn1/p/11232592.html
Copyright © 2020-2023  润新知