给出一个无重叠的按照区间起始端点排序的区间列表。
在列表中插入一个新的区间,你要确保列表中的区间仍然有序且不重叠(如果有必要的话,可以合并区间)。
您在真实的面试中是否遇到过这个题?样例
插入区间[2, 5] 到 [[1,2], [5,9]],我们得到 [[1,9]]。
插入区间[3, 4] 到 [[1,2], [5,9]],我们得到 [[1,2], [3,4], [5,9]]。
/**
* Definition of Interval:
* classs Interval {
* int start, end;
* Interval(int start, int end) {
* this->start = start;
* this->end = end;
* }
*/
class Solution {
public:
bool cmp(Interval &a,Interval &b){
if(a.start==b.start)
return a.end>b.end;
return a.start>b.start;
}
vector<Interval> insert(vector<Interval> &intervals, Interval newInterval) {
if(intervals.empty()){
intervals.push_back(newInterval);
return intervals;
}
int i=0,size=intervals.size();
while(i<size&&cmp(newInterval,intervals[i])){
++i;
}
intervals.insert(intervals.begin()+i,newInterval);
size=intervals.size();
for(int i=0;i<size-1;++i){
if(intervals[i+1].start>=intervals[i].start&&intervals[i+1].end<=intervals[i].end){
intervals.erase(intervals.begin()+i+1);
--size;
--i;
}
else if(intervals[i+1].start<=intervals[i].end){
intervals[i].end=intervals[i+1].end;
intervals.erase(intervals.begin()+i+1);
--size;
--i;
}
}
return intervals;
}
};