题目描述:以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] ,合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间 。
方法1:按左端点排序后再合并
intervals[i] [0] <= intervals[j] [0]
若intervals[i] [0] = intervals[j] [0] :可以合并
若intervals[i] [0] < intervals[j] [0]:
intervals[i] [1] < intervals[j] [0] 不可以合并
intervals[i] [1] > intervals[j] [0] 可以合并
如果intervals[i]和intervals[j]不可以合并,则intervals[i] [0] < intervals[j] [0],intervals[i] [1] < intervals[j] [0],则intervals[i] [0] < intervals[j+1] [0],intervals[i] [1] < intervals[j+1] [0],则j后面的全部都不可以和intervals[i]合并
class Solution {
public:
vector<vector<int>> merge(vector<vector<int>>& intervals) {
sort(intervals.begin(), intervals.end());
vector<vector<int>> merge;
for(int i=1;i<intervals.size();i++){
if(intervals[i][0] == intervals[i-1][0]) intervals[i][1] = max(intervals[i][1],intervals[i-1][1]);
else{
if(intervals[i][0] > intervals[i-1][1] ) merge.push_back(intervals[i-1]);//第i-1个数组后面也一定不会被合并了
else {
intervals[i][0] = intervals[i-1][0];
intervals[i][1] = max(intervals[i][1],intervals[i-1][1]);
}
}
}
merge.push_back(intervals[intervals.size()-1]);//把最后一个合并后的也加进去
return merge;
}
};