思路
先按照左区间进行排序,然后初始化left和right,重叠时,更新right,不重叠时,收集区间
代码
class Solution {
public:
static bool cmp(vector<int> a, vector<int> b){
if(a[0] == b[0]){
return a[1] < b[1];
}
return a[0] < b[0];
}
vector<vector<int>> merge(vector<vector<int>>& intervals) {
sort(intervals.begin(), intervals.end(), cmp);
vector<vector<int>> res;
int left = intervals[0][0];
int right = intervals[0][1];
for(int i = 1; i < intervals.size(); i++){
if(intervals[i][0] <= right){
right = max(right, intervals[i][1]);
}else{
vector<int> n = {left, right};
res.push_back(n);
left = intervals[i][0];
right = intervals[i][1];
}
}
vector<int> n = {left, right};
res.push_back(n);
return res;
}
};