首先为了方便合并先将集合按照每个区间的第一个元素进行排序 :
sort(A.begin(),A.end());
AC代码:
class Solution {
public:
vector<vector<int>> merge(vector<vector<int>>& A) {
//定义ans储存答案
vector<vector<int>> ans;
//对A进行排序
sort(A.begin(),A.end());
int len = A.size();
int len1 = A[0].size();
for(int i = 0; i<len; i++)
{
//如果i==len-1直接插入ans中,并退出循环放置越界
if( i == len-1)
{
ans.push_back({A[i][0],A[i][len1-1]});
break;
}
//left左指针,right右指针
int left = i, right = i+1;
//Min记录当前区间的最小值,Max记录最大值
int Min = A[i][0],Max = A[i][len1-1];
//当Max大于等于右指针的第一个元素时说明有相同的元素,while循环继续
//right<=len-1防止越界
while((Max>=A[right][0]) && right<=len-1)
{
left++;
right++;
//记录当前最大值
Max = max(max(Max,A[left-1][len1-1]),A[right-1][len1-1]);
//当右指针大于等于len是直接插入答案,并返回答案
if(right >= len)
{
ans.push_back({Min,Max});
return ans;
}
}
//将数组合并后的最小值最大值插入ans中
ans.push_back({Min,Max});
//令i = 左指针的值
i = left;
}
return ans;
}
};