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]
.
分析:经典的迭代,newInterval(A)与intervals(B[i])中的元素逐个比较,
1.若A < B[i],即A范围所有数小于B范围,那么直接插入A、插入B[i]以及后续元素
2.若A > B[i],插入B[i]进入下一次迭代
3.若A与B[i]有交集, 根据并集修改A :A.start = min( A.start, B[i].start); A.end = max(A.end, B[i].end);
class Solution {
public:
vector<Interval> insert(vector<Interval> &intervals, Interval newInterval) {
int size = intervals.size();
vector<Interval> ret;
for(int i=0; i<size; i++) {
if( newInterval.end < intervals[i].start) {
ret.push_back( newInterval);
ret.insert(ret.end(), intervals.begin()+i, intervals.end() );
return ret;
} else if(intervals[i].end < newInterval.start) {
ret.push_back( intervals[i]);
} else {
newInterval.start = min(newInterval.start, intervals[i].start);
newInterval.end = max(newInterval.end, intervals[i].end);
}
}
ret.push_back(newInterval);
return ret;
}
};