思路一:
class Solution {
public:
vector<vector<int>> merge(vector<vector<int>>& intervals) {
vector<vector<int>> res;
sort(intervals.begin(), intervals.end());
if (intervals.size() == 1) {
return intervals;
}
int left = intervals[0][0];
int i;
for (i = 1; i < intervals.size(); i++) {
//overlap
if (intervals[i][0] <= intervals[i - 1][1]) {
intervals[i][1] = max(intervals[i][1], intervals[i - 1][1]);
}
else {//更新左边界
vector<int> cur = { left, intervals[i - 1][1]};
res.push_back(cur);
left = intervals[i][0];
}
}
//存储最后一个区间
vector<int> cur = {left, intervals[i - 1][1]};
res.push_back(cur);
return res;
}
};
思路二:
class Solution {
public:
vector<vector<int>> merge(vector<vector<int>>& intervals) {
sort(intervals.begin(), intervals.end());
vector<vector<int>> res = {{intervals[0][0], intervals[0][1]}};
for(int i = 1; i < intervals.size(); i++){
//首尾交错
if(res.back()[1] >= intervals[i][0]){
if(res.back()[1] < intervals[i][1]){
res.back()[1] = intervals[i][1];
}
}else{
res.push_back({intervals[i][0], intervals[i][1]});
}
}
return res;
}
};