1.题目描述
示例 1:
输入:intervals = [[1,3],[2,6],[8,10],[15,18]]
输出:[[1,6],[8,10],[15,18]]
解释:区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].
示例 2:
输入:intervals = [[1,4],[4,5]]
输出:[[1,5]]
解释:区间 [1,4] 和 [4,5] 可被视为重叠区间。
示例 3:
输入:intervals = [[4,7],[1,4]]
输出:[[1,7]]
解释:区间 [1,4] 和 [4,7] 可被视为重叠区间。
2.解题思路
1)将区间列表里的区间,按左边界排序
2)(a,b)(c,d),if (c<=d) then 合并为(a,max(b,d));

3.代码
cpp
vector<vector<int>> merge(vector<vector<int>>& intervals) {
if(intervals.size()==0 || intervals.size()==1){
return intervals;
}
sort(intervals.begin(),intervals.end());
vector<vector<int>> res;
res.push_back(intervals[0]);
for(int i =0;i<=intervals.size()-1;i++){
//从第一行元素(第一个区间开始遍历)
//遍历每一个区间都和res里的最后一个元素进行对比看是否能合并
if(res.back()[1]>=intervals[i][0]){
//当前左边界比res的back元素的右边界小或者等于,则合并
int L = res.back()[0];//合并后的左边界一定是左边区间的左边界
int R = intervals[i][1];
res.back()[1] = max(res.back()[1],R);//(a,b)(c,d),if (c<=d) then 合并为(a,max(b,d)),注意合并后的右边界的写法
}else{
res.push_back(intervals[i]);
}
}
return res;
}