class Solution {
public:
vector<vector<int>> merge(vector<vector<int>>& intervals) {
//先对数组进行排序
sort(intervals.begin(),intervals.end());
//用于存储结果
vector<vector<int>> nums;
//将第一个区间加入到存储结果的数组中
nums.push_back(intervals[0]);
//从第一个区间开始遍历
for(int i=1;i<intervals.size();i++)
{
//获取结果数组中的最后一个区间
vector<int>& last = nums.back();
//结果数组中最后一个区间的有边界大于当前区间的左边界说明重叠
if(last[1]>=intervals[i][0])
{
//修改结果数组中最后一个区间的右边界为:结果数组中最后一个区间的右边界和当前区间的右边界之间的最大值
last[1] = max(last[1],intervals[i][1]);
}
else//不重叠直接加入到结果数组中
{
nums.push_back(intervals[i]);
}
}
return nums;
}
};
思路:
1.先将数组排好序,以便能找到重叠的区间,数组是乱序的话很难去寻找重叠的部分
2.创建一个存结果的数组nums,用于返回结果
3.先将第一个区间加入到结果数组中,然后从行索引为1开始遍历,方便比较
4.以引用的方式获取结果数组中的最后一个区间,方便重叠的时候直接对结果数组中的右边界进行更改
5.如果重叠,将结果数组中区间的右边界改为当前区间的右边界和结果数组中区间的右边界之中的最大的一个右边界,因为会有{1,4},{2,3}的情况。
6.不重叠直接将当前区间加入到结果数组中