给出一个区间的集合,请合并所有重叠的区间。
示例 1:
输入: intervals = [[1,3],[2,6],[8,10],[15,18]]
输出: [[1,6],[8,10],[15,18]]
解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].
思路:
采用贪心算法和双指针。首先将数组进行默认排序,设置变量t记录当前区间右端数值。i从0开始,j为i+1指向i的下一个数组。如果j不超过数组大小并且j所指的数组第一个数值小于i所指数值的右端点。说明这两个区间可以合并,更新t并且自增j。将合并的区间放入数组,并且更新i的值。
class Solution {
public:
vector<vector<int>> merge(vector<vector<int>>& intervals) {
sort(intervals.begin(),intervals.end());
vector<vector<int>> res;
for(int i=0;i<intervals.size();){
int t=intervals[i][1];
int j=i+1;
while(j<intervals.size()&&intervals[j][0]<=t){
t=max(t,intervals[j][1]);
j++;
}
res.push_back({intervals[i][0],t});
i=j;
}
return res;
}
};