核心思想
把多个离散的区间按照交集合并起来
1.处理步骤
(1) 区间排序(一般左右端点)
(2) 扫描整个空间,判断当前待处理的区间 seg[i]
和维护的区间 st-ed
的关系
2. 代码模板
// 区间合并
int merge(vector<std::pair<int, int>>& segs)
{
if(segs.size() == 0) return 0;
// 按照左端点进行排序
sort(segs.begin(), segs.end());
vector<std::pair<int, int>> res;
// 扫描每个区间,维护当前区间,看每个区间和当前区间的关系(记得处理最后一个区间)
int st = segs[0].first, ed = segs[0].second;
for(int i = 1; i < segs.size(); i++)
{
if(segs[i].first > ed)
{
res.push_back({st, ed});
st = segs[i].first;
ed = segs[i].second;
} else {
ed = max(ed, segs[i].second);
}
}
res.push_back({st, ed});
return res.size();
}