给出一个无重叠的按照区间起始端点排序的区间列表。
在列表中插入一个新的区间,你要确保列表中的区间仍然有序且不重叠(如果有必要的话,可以合并区间)。
您在真实的面试中是否遇到过这个题?Yes
样例
插入区间[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:
/**
* Insert newInterval into intervals.
* @param intervals: Sorted interval list.
* @param newInterval: new interval.
* @return: A new interval list.
*/
vector<Interval> insert(vector<Interval> &intervals, Interval newInterval) {
// write your code here
if(intervals.empty()) return vector<Interval>(1,newInterval);
int n=intervals.size();
int i;
for(i=0;i<n;i++){
if(newInterval.start<=intervals[i].start) break;
}
intervals.insert(intervals.begin()+i,newInterval);
return merge(intervals);
}
vector<Interval> merge(vector<Interval>&a){
int n=a.size();
if(n==0) return vector<Interval>();
int i,j;
vector<Interval>ans;
j=0;ans.push_back(a[0]);
for(int i=1;i<n;i++){
if(a[i].start>ans[j].end){
++j;
ans.push_back(a[i]);
}else{
ans[j].end=max(ans[j].end,a[i].end);
}
}
return ans;
}
};