思路:先将区间的左端点排序,完后维护一个区间,将这个区间的右端点与下一个区间进行比较,如果右端点在下一个区间内,则将这个区间纳入我们维护的区间中,否则,更新我们维护的区间
class Solution {
public:
vector<vector<int>> merge(vector<vector<int>>& intervals) {
if (intervals.size() == 0)
{
return {};
}
sort(intervals.begin(), intervals.end());
//对于类型的数组,默认的排序规则是按第一维的大小进行排序,如果第一维相同,则按第二维大小进行二级排序。
int st =intervals[0][0], ed = intervals[0][1];//前面已经判断区间不为空,这里直接给他赋值
vector<vector<int>>ans;
int i = 1;
int n = intervals.size();
while (i <n)
{
if (ed < intervals[i][0])
{
ans.push_back({ st,ed });
st = intervals[i][0], ed = intervals[i][1];//继承这个区间的,合并失败
}
else {
if (ed < intervals[i][1])
{
ed = intervals[i][1];//合并区间
}
}
i++;
}
ans.push_back({ st,ed });//由于最后一个区间没有压入,这里手动压入
return ans;
}
};