【问题描述】
输入n组整数区间[u,v],如果某些区间相邻或重叠(包含)则合并相应区间。输出合并后的区间。
两区间重叠如 [1,5][3,7] 或 [5,8][2,6]。两区间包含如[1,5][2,3]、[1,5][1,5]、[1,5][1,1]。
两区间相邻如 [1,5][5,6] 或 [4,8][2,4]。
【输入形式】
第一行有一整数,表示区间的数目n,其中n<=100。
接下来 n 行,每行两个整数 u, v,表示一个区间的起始点和终止点的坐标。对于每行u<=v。
【输出形式】
分多行按起始坐标输出合并后的区间,一行表示一个合并后的区间,每行内用空格分隔起点和终点坐标。
【样例输入】
6
472 473
150 300
100 200
470 471
450 470
200 450
【样例输出】
100 471
472 473
vector<vector<int>> merge(vector<vector<int>>& intervals) {
int len = intervals.size();
vector<vector<int>> ans;
sort(intervals.begin(), intervals.end(), [&](const vector<int>& v1, const vector<int>& v2) {
return v1[0] < v2[0];
});
ans.push_back(intervals[0]);
int pos = 0;
for (int i = 1; i < len; i++) {
if (intervals[i][0] >= ans[pos][0] && intervals[i][0]<=ans[pos][1]) {
if(intervals[i][1]>=ans[pos][1])
{
ans[pos][1] = intervals[i][1];
}
}
else {
ans.push_back(intervals[i]);
pos++;
}
}
return ans;
}