题目如下:
解题思路:
- 首先,将列表按照区间的 start 大小排序,那么在这个排序的列表中可以合并的区间一定是连续的。
- 然后,将第一个区间插入 merged 数组中,然后按顺序考虑之后的每个区间:
- 如果当前区间的左端点在前一个区间的右端点之后,那么他们不会重合,可以直接将这个区间插入 merged 中;
- 否则,他们重合,更新前一个区间的右端点。
代码如下:
class Solution {
public:
vector<vector<int>> merge(vector<vector<int>>& intervals) {
if(intervals.empty())
return {};
sort(intervals.begin(), intervals.end()); //根据区间start大小对集合排序
vector<vector<int>> res;
res.push_back(intervals[0]);
for(int i = 1; i < intervals.size(); i++)
{
//前一个区间的右边界大于等于后一个区间的左边界
if(res.back()[1] >= intervals[i][0]){
res.back()[1] = max(res.back()[1], intervals[i][1]);
}
//前一个区间的右边界小于后一个区间的右边界
else{
res.push_back(intervals[i]);
}
}
return res;
}
};