题目
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].
解析
题意:给了一个区间数组与一个区间,将区间合入区间数组中
解析:先将给的单独区间合入数组,然后如同56题那样合并区间即可
代码
时间复杂度:O(n)
先附上自己的:
/**
* Definition for an interval.
* struct Interval {
* int start;
* int end;
* Interval() : start(0), end(0) {}
* Interval(int s, int e) : start(s), end(e) {}
* };
*/
class Solution {
public:
vector<Interval> insert(vector<Interval>& intervals, Interval newInterval) {
vector<Interval> tmp;
if(intervals.size()==0) {
tmp.push_back(newInterval);
return tmp;
}
bool inserted=false;
for(int i=0;i<intervals.size();i++){
tmp.push_back(intervals[i]);
if(tmp.back().end>=newInterval.start&&newInterval.start>=tmp.back().start){
tmp.back().start=min(tmp.back().start,newInterval.start);
tmp.back().end=max(tmp.back().end,newInterval.end);
inserted=true;
}
}
if(inserted==false)
tmp.push_back(newInterval);
sort(tmp.begin(),tmp.end(),[](Interval a,Interval b){return a.start<b.start;});
vector<Interval> ret;
ret.push_back(tmp[0]);
for(int i=1;i<tmp.size();i++){
if(ret.back().end<tmp[i].start) ret.push_back(tmp[i]);
else
ret.back().end=max(ret.back().end,tmp[i].end);
}
return ret;
}
};
下面是discuss中简短的:
vector<Interval> insert(vector<Interval>& intervals, Interval newInterval) {
vector<Interval> ret;
auto it = intervals.begin();
for(; it!=intervals.end(); ++it){
if(newInterval.end < (*it).start) //all intervals after will not overlap with the newInterval
break;
else if(newInterval.start > (*it).end) //*it will not overlap with the newInterval
ret.push_back(*it);
else{ //update newInterval bacause *it overlap with the newInterval
newInterval.start = min(newInterval.start, (*it).start);
newInterval.end = max(newInterval.end, (*it).end);
}
}
// don't forget the rest of the intervals and the newInterval
ret.push_back(newInterval);
for(; it!=intervals.end(); ++it)
ret.push_back(*it);
return ret;
}