以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间
示例:
输入:intervals = [[1,3],[2,6],[8,10],[15,18]] 输出:[[1,6],[8,10],[15,18]] 解释:区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6] |
解决思想:
1、判断数组 的 大小,若是 1 ,直接返回数组即可
2、若数组大小 大于1 ,先将数组进行排列;
3、创建 一个新的数组,用于存放 合并后的集合;
4、先将第一个集合放入数组,然后判断 第一个集合的结束区间 与 第二个集合的开始区间的大小关系,若是 大于,即可进行合并;否则,将第二个集合也存入数组中,判断第二个集合与第三个集合;
5、合并时,判断第一个集合的结束区间 与 第二个集合的结束区间 的大小关系,将较大的结束区间放入第一个集合的结束区间;
6、遍历数组进行判断,将合并后的数组返回即可。
代码:
class Solution {
public:
vector<vector<int>> merge(vector<vector<int>>& intervals) {
int n = intervals.size();
if(n == 1)
return intervals;
sort(intervals.begin(), intervals.end());
vector<vector<int>> v;
v.push_back(intervals[0]);
int j = 0;
for(int i = j+1; i < n; i++)
{
if(v[j][1] >= intervals[i][0])
v[j][1] = max(v[j][1], intervals[i][1]);
else
{
v.push_back(intervals[i]);
j++;
}
}
return v;
}
};