发现这个题目变简洁了。区间直接以二维数组的形式给出,而不是自己定义的数据结构,所以不需要自己写排序函数了。
给出一个无重叠的 ,按照区间起始端点排序的区间列表。
在列表中插入一个新的区间,你需要确保列表中的区间仍然有序且不重叠(如果有必要的话,可以合并区间)。
示例 1:
输入: intervals = [[1,3],[6,9]], newInterval = [2,5]
输出: [[1,5],[6,9]]
示例 2:
输入: intervals = [[1,2],[3,5],[6,7],[8,10],[12,16]], newInterval = [4,8]
输出: [[1,2],[3,10],[12,16]]
解释: 这是因为新的区间 [4,8] 与 [3,5],[6,7],[8,10] 重叠。
思路:先插入区间,再合并区间。插入区间条件:newInterval[0] < intervals[i][0],就把newInterval插入到intervals[i]前面。合并区间同56. 合并区间。
class Solution {
public:
vector<vector<int>> insert(vector<vector<int>>& intervals,
vector<int>& newInterval) {
vector<vector<int>>re ;
int i=0;
for(i=0; i<intervals.size(); ++i){
if(newInterval[0] < intervals[i][0]){
intervals.insert(intervals.begin()+i, newInterval);
break;
}
}
if(i==intervals.size()){
intervals.push_back(newInterval);
}
re.push_back(intervals[0]);
for(int j=1; j<intervals.size(); ++j){
if(intervals[j][0]<=re.back()[1]){
re.back()[1]=max(intervals[j][1], re.back()[1]);
}
else{
re.push_back(intervals[j]);
}
}
return re;
}
};
#######################################################################################
原始版本:
给出一个无重叠的 ,按照区间起始端点排序的区间列表。
在列表中插入一个新的区间,你需要确保列表中的区间仍然有序且不重叠(如果有必要的话,可以合并区间)。
示例 1:
输入: intervals = [[1,3],[6,9]], newInterval = [2,5]
输出: [[1,5],[6,9]]
示例 2:
输入: intervals = [[1,2],[3,5],[6,7],[8,10],[12,16]], newInterval = [4,8]
输出: [[1,2],[3,10],[12,16]] 解释: 这是因为新的区间 [4,8] 与 [3,5],[6,7],[8,10] 重叠。
思路:在56. 合并区间的基础上,先插入区间,再合并区间,思路非常简单。
class Solution {
public:
static bool cmp(Interval a, Interval b){
if (a.start != b.start)
return a.start < b.start;
else
return a.end < b.end;
}
//合并区间
vector<Interval> merge(vector<Interval>& intervals) {
vector<Interval> re;
re.push_back(intervals[0]);
for (int i = 1; i < intervals.size(); ++i){
if (intervals[i].start <= re.back().end)
re.back().end = max(re.back().end, intervals[i].end);
else
re.push_back(intervals[i]);
}
return re;
}
//先插入区间
vector<Interval> insert(vector<Interval>& intervals, Interval newInterval) {
sort(intervals.begin(), intervals.end(), cmp);
int i=0;
for (int i = 0; i < intervals.size(); ++i){
if (intervals[i].start >= newInterval.start){
intervals.insert(intervals.begin() + i, newInterval);
break;
}
}
if(i==intervals.size()){
intervals.push_back(newInterval);
}
return merge(intervals);
}
};