首页 > 代码库 > [leetcode]Insert Interval

[leetcode]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].


基本思路:

考虑三种情况:

  1. newInterval.start > intervals[i].end    将intervals[i]加入结果
  2.  newInterval.end < intervals[i].start    将newInterval加入结果
  3. overlap  将融合的几何加入结果


代码:

//my code is ugly. so i copy a wonderfu for you. vector<Interval> insert(vector<Interval> &intervals, Interval newInterval) {  //C++
    vector<Interval> ret;
    int i = 0;
    for (i = 0; i < intervals.size(); i++)
    {        
        // If newInterval is BEHIND the current interval
        if (newInterval.start > intervals[i].end) 
            ret.push_back(intervals[i]); // then the current interval goes to the result
        // If new Interval is BEFORE the current interval
        else if (newInterval.end < intervals[i].start) 
        {
            ret.push_back(newInterval); // then new interval goes to the result
            newInterval = intervals[i]; // and save the current interval for later
        }
        else // If newInterval OVERLAPS WITH the current interval
        {
            // Then simply merge the two intervals.
            newInterval.start = min(newInterval.start, intervals[i].start);
            newInterval.end = max(newInterval.end, intervals[i].end);
        }
    }
    // In the end, there will be one interval that is still not stored in the result; and this interval, regardless where it comes from the vector or the newInterval, must be stored in newInterval at this point.
    ret.push_back(newInterval);
    return ret;
}


[leetcode]Insert Interval