
思路:
先按左边界排序,然后开始遍历。发现有当前位置区间和前一位置区间有交集,就合并区间并存放在当前位置,这样可以方便之后遍历的下一位置i+1与当前位置i对比看是否有交集。若无交集则将当前位置i存放的区间放到res中。
代码如下:
cpp
class Solution {
public:
vector<vector<int>> merge(vector<vector<int>>& intervals) {
sort(intervals.begin(),intervals.end(),
[](const vector<int> &a,const vector<int>&b){
if(a[0]==b[0]){
return a[1]<b[1];
}
else return a[0]<b[0];
});
vector<vector<int>> res;
if(intervals.size()<=1) return intervals;
for(int i=1;i<intervals.size();++i){
if(intervals[i][0]<=intervals[i-1][1]){
intervals[i][0]=min(intervals[i][0],intervals[i-1][0]);
intervals[i][1]=max(intervals[i][1],intervals[i-1][1]);
}
else{
vector<int> path={intervals[i-1][0],intervals[i-1][1]};
res.push_back(path);
}
if(i==intervals.size()-1){
res.push_back({intervals[i][0],intervals[i][1]});
}
}
return res;
}
};