解题思路:
- 采用升序排序方式,注意判断相邻子区间的左端点的值所处位置,来重新更改结果集中的区间大小
- 注意!res.size() || L>res.back()[1]问题
class Solution {
public:
vector<vector<int>> merge(vector<vector<int>>& intervals) {
// 所有都按照升序进行排序
sort(intervals.begin(),intervals.end());
vector<vector<int>>res;
for(int i = 0;i<intervals.size();++i){
// 子区间左端点
int L = intervals[i][0];
// 子区间右端点
int R = intervals[i][1];
// 这里面必须!res.size() || L>res.back()[1]这个顺序,因为初始的时候res为空,res.back()会报错
// runtime error: applying non-zero offset 18446744073709551592 to null pointer (stl_iterator.h)
// 但是||或符号判断时,只要左边为真就不会判断右边,所以这样写不会报错
if(!res.size() || L>res.back()[1]){
// 当前子区间和上一个子区间不存在重合部分
res.push_back({L,R});
}else{
// 当前子区间和上一个子区间存在重合部分
res.back()[1]=max(res.back()[1],R);
}
}
return res;
}
};