题目描述 合并区间
给出一个区间的集合,请合并所有重叠的区间。
示例
输入: [[1,3],[2,6],[8,10],[15,18]]
输出: [[1,6],[8,10],[15,18]]
解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].
解题思路
按照列表每一个子列表的第一个元素对列表的所有元素进行排序。然后对相邻两个子元素进行两两比较。
假设两个相邻的子元素分别为 [x1, y1] 和 [x2, y2],如果该区间可合并必须满足条件 y1 >= x2。
若该区间可合并,合并结果可能有两种:
当 y1 < y2 时,合并结果为 [x1, y2]
当 y1 >= y2 时,合并结果为 [x1, y1]
代码
class Solution {
public:
vector<vector<int>> merge(vector<vector<int>>& intervals) {
vector<vector<int>> res;
if(intervals.size()==0||intervals[0].size()==0) return res;
if(intervals.size()==1) return intervals;
sort(intervals.begin(), intervals.end(), [](vector<int> a, vector<int> b){
return a[0] < b[0];
});
int x=intervals[0][0];
int y=intervals[0][1];
for(int i=1;i<intervals.size();i++){
if(intervals[i][0]<=y){
if(intervals[i][1]>y) y = intervals[i][1];
}else{
res.push_back({x, y});
x = intervals[i][0];
y = intervals[i][1];
}
}
res.push_back({x, y});
return res;
}
};