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