题目:以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间,并返回一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。
思路:
1、创建一个新的vector(res)存放新的区间 先把intervals[0]存进去
2、比较res内第j个区间 和 intervals内第i = j+1个区间;若有交集则 res[i][1]取两个区间较大的;若无交集,把intervals[i]放在res的末尾 再j++
编程过程中要考虑的问题:
1、如果intervals的size<=1 直接返回当前intervals
2、如果不int j = 0,然后 让i = j + 1,最后再j++ 会出现out of range vector iterator的问题
算法代码部分:
class Solution {
public:
vector<vector<int>> merge(vector<vector<int>>& intervals) {
if (intervals.size() <= 1)
{
return intervals;
}
sort(intervals.begin(), intervals.end());
vector<vector<int>> res;
res.push_back(intervals[0]);
int j = 0;
for (int i = j + 1; i < intervals.size(); i++)
{
if (intervals[i][0] <= res[j][1])
{
res[j][1] = max(res[j][1], intervals[i][1]);
}
else {
res.push_back(intervals[i]);
j++;
}
}
return res;
}
};