原题:
解决方法:
代码:
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]
.
解决方法:
很有意思的一道题。直接从原数值中取出区间,
- 如果该区间跟新区间有重叠,将该区间合并到新区间上;
- 如果新区间在该区间的前面,则先后插入新区间 和该区间;
- 如果该区间跟新区间不重叠,则直接加入到结果集中。
代码:
vector<Interval> insert(vector<Interval>& intervals, Interval newInterval) {
int n = intervals.size();
bool inserted = false;
vector<Interval> res;
for(auto i: intervals){
if (inserted){
res.push_back(i);
continue;
}
if (i.end < newInterval.start){
res.push_back(i);
}
else if (i.start > newInterval.end){
res.push_back(newInterval);
inserted = true;
res.push_back(i);
}else{
newInterval.start = min(newInterval.start, i.start);
newInterval.end = max(newInterval.end, i.end);
}
}
if (!inserted)
res.push_back(newInterval);
return res;
}