LeetCode 57 Insert Interval

来源:互联网 发布:大数据专业怎么样 编辑:程序博客网 时间:2024/05/18 15:06

题意:

给出一些区间和一个待插入的区间,求他们的并。


思路:

如果把区间都放在一起,排好序,就可以按 http://blog.csdn.net/houserabbit/article/details/72763935 的方法做。

但很显然有更高效的one pass方法。

如果新区间与老区间都没有交,那么直接插入,如果有交,则维护区间的开始和终止位置在哪。


代码:

/** * 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> ans;        if (intervals.size() == 0) {            ans.push_back(newInterval);            return ans;        }        int s = newInterval.start, e = newInterval.end;        bool in = false, insert = false;        for (int i = 0; i < intervals.size(); ++i) {            if (intervals[i].end < s) {                ans.push_back(intervals[i]);            } else if (intervals[i].start > e) {                if (!insert) {                    insert = true;                    in = false;                    ans.push_back(Interval(s, e));                }                ans.push_back(intervals[i]);            } else {                in = true;                s = min(s, intervals[i].start);                e = max(e, intervals[i].end);            }        }        if (!insert && (in || intervals[intervals.size() - 1].end < s)) {            ans.push_back(Interval(s, e));        }        return ans;    }};