class Solution {
public:
vector<vector<int>> merge(vector<vector<int>>& intervals) {
sort(intervals.begin(),intervals.end());
vector<vector<int>> ret;
int n = intervals.size();
int start = intervals[0][0];
int end = intervals[0][1];
for(int i = 1;i<n;i++)
{
if(intervals[i][0]<=end)//当前考虑区间能与之前区间合并
{
end=max(end,intervals[i][1]);
}
else//不能合并的时候
{
//先把之前的区间加入结果
ret.push_back({start,end});
start=intervals[i][0];
end=intervals[i][1];
}
}
ret.push_back({start,end});
return ret;
}
};
先将所有区间按照区间开始值进行大小排序。然后定义一个初始的区间,之后我们将对后续的区间进行逐个判断,判断能否与定义的初始区间合并。若能合并,则更新区间结束的值,若无法合并,则将之前的初始区间加入最后结果,接着更新初始区间,再逐个与之后未考虑的区间进行比较。直到所有的区间都被考虑过之后,再把最后一组区间加入结果就好。