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]
.
考虑三种情况:
//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; }
原文地址:http://blog.csdn.net/chenlei0630/article/details/41489937