57. Insert Interval

来源:互联网 发布:视频软件 知乎 编辑:程序博客网 时间:2024/05/21 06:47


这道题让我们在一系列非重叠的区间中插入一个新的区间。

方法是,遍历区间集合,如果新区间的end小于区间i的start,那新区间的end肯定也小于后面区间的start,就不用往后面遍历了,把新区间加入res里,集合里后面的区间也加入res里。如果区间i的end大于新区间的start,说明新区间和这个区间有交集,那么不把区间i加入res里,更新新区间,继续往后遍历,等到新区间的end小于区间i的start,说明所有和新区间有交集的都合并好了,那么就把新区间加入结果集,再把后面的集合加入结果集就好了。

/** * Definition for an interval. * struct Interval { *     int start; *     int end; *     Interval() : start(0), end(0) {} *     Interval(int s, int e) : start(s), end(e) {} * }; */class Solution {public:    vector<Interval> insert(vector<Interval>& intervals, Interval newInterval) {        vector<Interval> res;        auto iter = intervals.begin();        for(; iter != intervals.end(); ++iter){            if(iter->start > newInterval.end)   break;            else if(iter->end < newInterval.start){                res.push_back(*iter);            }            else{                newInterval.start = min(newInterval.start, iter->start);                newInterval.end = max(newInterval.end, iter->end);            }        }        res.push_back(newInterval);        for(; iter != intervals.end(); ++iter){            res.push_back(*iter);        }        return res;    }};



原创粉丝点击