美文网首页
57. Insert Interval 插入区间

57. Insert Interval 插入区间

作者: xingzai | 来源:发表于2019-04-14 00:02 被阅读0次

    题目链接
    tag:

    • Hard;

    question:
      Given a set of non-overlapping intervals, insert a new interval into the intervals (merge if necessary).

    You may assume that the intervals were initially sorted according to their start times.

    Example 1:

    Input: intervals = [[1,3],[6,9]], newInterval = [2,5]
    Output: [[1,5],[6,9]]

    Example 2:

    Input: intervals = [[1,2],[3,5],[6,7],[8,10],[12,16]], newInterval = [4,8]
    Output: [[1,2],[3,10],[12,16]]
    Explanation: Because the new interval [4,8] overlaps with [3,5],[6,7],[8,10].

    思路:
      本题让在一系列非重叠的区间中插入一个新的区间,可能还需要和原有的区间合并,那需要对给区间集一个一个的遍历比较,那么会有两种情况,重叠或是不重叠,不重叠的情况好办,直接将新区间插入到对应的位置即可,重叠的情况比较复杂,有时候会有多个重叠,需要更新新区间的范围以便包含所有重叠,之后将新区间加入结果res,最后将后面的区间再加入结果即可。
      具体思路是,我们用一个变量cur来遍历区间,如果当前cur区间的结束位置小于要插入的区间的起始位置的话,说明没有重叠,则将cur区间加入结果res中,然后cur自增1。直到有cur越界或有重叠while循环退出,然后再用一个while循环处理所有重叠的区间,每次用取两个区间起始位置的较小值,和结束位置的较大值来更新要插入的区间,然后cur自增1。直到cur越界或者没有重叠时while循环退出。之后将更新好的新区间加入结果res,然后将cur之后的区间再加入结果res中即可,代码如下:

    /**
     * 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;
            int n = intervals.size(), cur = 0;
            while (cur < n && intervals[cur].end < newInterval.start) {
                res.push_back(intervals[cur++]);
            }
            while (cur < n && intervals[cur].start <= newInterval.end) {
                newInterval.start = min(newInterval.start, intervals[cur].start);
                newInterval.end = max(newInterval.end, intervals[cur].end);
                ++cur;
            }
            res.push_back(newInterval);
            while (cur < n) {
                res.push_back(intervals[cur++]);
            }
            return res;
        }
    };
    

    相关文章

      网友评论

          本文标题:57. Insert Interval 插入区间

          本文链接:https://www.haomeiwen.com/subject/yavdwqtx.html