给出一个区间的集合,请合并所有重叠的区间。
示例 1:
输入: [[1,3],[2,6],[8,10],[15,18]] 输出: [[1,6],[8,10],[15,18]] 解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].
排序法
如果排序后,可以发现如果intervals[i][1] >= intervals[i+1][0],则合并后的区间为{intervals[0], max(intervals[i][1], intervals[i+1][1])}。
注意:
1.不能把合并后的区间直接放入答案中,因为合并后的区间可能还可以和后面的区间继续合并,所以这里使用了temp用来存放合并后的区间;
2.所以放入答案中的条件是不能合并,然后temp向前移一步;
3.循环并没有遍历到最后一个区间,所以在循环结束时,还要在放入一次。
class Solution {
typedef vector<vector<int>> TwoDimArray;
public:
TwoDimArray merge(TwoDimArray& intervals) {
TwoDimArray ans;
if(intervals.size() == 0) return ans;
sort(intervals.begin(), intervals.end());
vector<int> temp = intervals[0];
for(int i = 0; i < intervals.size() - 1; i++){
if(temp[1] < intervals[i+1][0]){
ans.push_back(temp);
temp = intervals[i+1];
}
else temp = {temp[0], max(temp[1], intervals[i+1][1])};
}
ans.push_back(temp);
return ans;
}
};