56. 合并区间
给出一个区间的集合,请合并所有重叠的区间。
示例 1:
输入:
[[1,3],[2,6],[8,10],[15,18]]
输出:
[[1,6],[8,10],[15,18]]
解释:
区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].
示例 2:
输入:
[[1,4],[4,5]]
输出:
[[1,5]]
解释:
区间 [1,4] 和 [4,5] 可被视为重叠区间。
思路:
将二维数组按第一个值排序,用左指针指向区间开始,x表示区间连续的范围,右指针指向下一个区间的开始,若比 x 小则可以合并,若比 x 大则断开区间,并移动左指针跳过已经合并的区间
代码
class Solution {
public:
vector<vector<int>> merge(vector<vector<int>>& intervals) {
vector<vector<int>>a;
int s=intervals.size();
sort(intervals.begin(),intervals.end());
for(int i = 0; i < s;)
{
int x=intervals[i][1];
int h=i+1;
while(h < s && intervals[h][0] <= x )//顺序不能变!!
{
x=max(x,intervals[h][1]);
h++;
}
a.push_back({intervals[i][0],x});
i=h;
}
return a;
}
};