合并区间
题中的 intervals 是一个动态二维数组
我们可以定义一个新动态数组vec
在对intervals排序后 ,直接将第一行数组存 vec (因为排序后的intervals的第一行数组的左区间值一定极小 (这是离散里的极小))
注意:对二维数组排序规则 参考 c++ 二维数组排序
定义 两个变量i = 1, j = 0
使 j 指向 第一行的数组 ,i指向第二行的数组
(理解完代码后,我们会发现 j 和 i有点像之前几篇的快慢指针)
此时开始合并操作
若 i指向的数组的左区间 < j指向的右区间 ,即 intervals[i][0] < intervals[j][1] 则 可以合并 vec[j][1] = max(intervals[I][1],intervals[j][1])
反之,不可合并 则 该行数组已经确定 向vec中存入该数组
j++,继续指向下一行
以 eg1 为sample
j指向第0行 i指向第1行
进行第一次的合并判断
vec 现在状态[1,6]
然后进行下一次循环 i变到2,指向第2行
因此 直接存入该行
后面操作相同,就不11举例了
//今天这篇写的好细
以下是AC代码
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>> vec;
vec.push_back(intervals[0]);
int i = 1, j = 0;
for(i = 1; i < intervals.size(); i++)
{
if(intervals[i][0] <= vec[j][1])
vec[j][1] = vec[j][1]=max(vec[j][1], intervals[i][1]);
else
{
vec.push_back(intervals[i]);
j++;
}
}
return vec;
}
};