57. Insert Interval

57. Insert Interval

题目

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:
Given intervals [1,3],[6,9], insert and merge [2,5] in as [1,5],[6,9].

Example 2:
Given [1,2],[3,5],[6,7],[8,10],[12,16], insert and merge [4,9] in as [1,2],[3,10],[12,16].

This is because the new interval [4,9] overlaps with [3,5],[6,7],[8,10]. 

解析

  • 此题可以借鉴56的解题思路
  • 另外由于本题说明Given a set of non-overlapping intervals初始没有重叠元素,只是需要更改加入的区间即可,见参考代码
class Solution_57 {
public:
    static int compare(Interval val1, Interval val2)
    {
        return val1.start < val2.start;
    }

    vector<Interval> insert(vector<Interval>& intervals, Interval newInterval) {

        vector<Interval> vec;
        if (intervals.empty())
        {
            vec.push_back(newInterval);
            return vec;
        }
        intervals.push_back(newInterval);
        sort(intervals.begin(), intervals.end(), compare);

        Interval node = intervals[0]; //
        for (int i = 1; i < intervals.size();i++)
        {
            Interval temp = intervals[i];
            if (node.end>=temp.start)
            {
                node.end = max(node.end,temp.end);
            }
            else
            {
                vec.push_back(node);
                node = temp;
            }
        }
        vec.push_back(node);

        return vec;
    }
};


vector<Interval> insert(vector<Interval>& intervals, Interval newInterval) {
    vector<Interval> ret;
    auto it = intervals.begin();
    for(; it!=intervals.end(); ++it){
        if(newInterval.end < (*it).start) //all intervals after will not overlap with the newInterval
            break; 
        else if(newInterval.start > (*it).end) //*it will not overlap with the newInterval
            ret.push_back(*it); 
        else{ //update newInterval bacause *it overlap with the newInterval
            newInterval.start = min(newInterval.start, (*it).start);
            newInterval.end = max(newInterval.end, (*it).end);
        }   
    }
    // don't forget the rest of the intervals and the newInterval
    ret.push_back(newInterval);
    for(; it!=intervals.end(); ++it)
        ret.push_back(*it);
    return ret;
}

题目来源

    原文作者:ranjiewen
    原文地址: https://www.cnblogs.com/ranjiewen/p/8582914.html
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞