算法:st,ed表示当前区间的左端点和右端点
1.将所有区间按左端点排序
2.扫描整个区间,扫描的过程中,将所有可能有交集的区间合并
(1)a区间在当前区间的内部:st和ed不变
(2)a区间和当前区间有交集:ed更新为a区间的右端点
(3)a区间和当前区间没有交集: 将当前区间计入答案,st更新为a区间左端点,ed更新为a区间右端点
class Solution {
public:
typedef pair<int,int> PII;
vector<PII> segs;
vector<vector<int>> merge(vector<vector<int>>& intervals) {
vector<vector<int>> res;
for(auto &x : intervals) segs.push_back({x[0],x[1]});
sort(segs.begin(),segs.end()); //左端点从小到大排序
int st = -2e9,ed = -2e9;
for(auto &seg : segs){
if(ed < seg.first){
if(st != -2e9){
vector<int> t;
t.push_back(st);
t.push_back(ed);
res.push_back(t);
}
st = seg.first;
ed = seg.second;
}
else ed = max(ed,seg.second);
}
if(st != -2e9){
vector<int> t;
t.push_back(st);
t.push_back(ed);
res.push_back(t);
}
return res;
}
};