给定一个区间数组 intervals,其中 intervals[i] = [start_i, end_i],请合并所有重叠的区间,并输出合并后的区间。
输入描述
第一行输入一个整数 n,表示区间数量。
接下来 n 行,每行输入两个整数 start 和 end。
输出描述
输出合并后的区间,每行一个区间,按起始位置从小到大排列。
示例 1
输入
text
4
1 3
2 6
8 10
15 18
输出
text
1 6
8 10
15 18
C++ 解法
cpp
#include <bits/stdc++.h>
using namespace std;
int main() {
int n;
cin >> n;
vector<pair<int,int>> intervals(n);
for (int i = 0; i < n; i++) {
cin >> intervals[i].first >> intervals[i].second;
}
sort(intervals.begin(), intervals.end());
vector<pair<int,int>> ans;
for (auto& p : intervals) {
if (ans.empty() || ans.back().second < p.first) {
ans.push_back(p);
} else {
ans.back().second = max(ans.back().second, p.second);
}
}
for (auto& p : ans) {
cout << p.first << " " << p.second << endl;
}
return 0;
}