区间合并算法
1、题目如图
2、算法代码
#include <iostream>
#include <cstring>
#include <algorithm>
#include <vector>
using namespace std;
typedef pair<int, int> PII;
vector<PII>segs;
int n;
//merge函数是核心
void merge(vector<PII> &segs)
{
vector<PII>res;
sort(segs.begin(),segs.end()); //先将区间排序,这里要注意C++默认先将pair的左侧排序。
int st = -2e9, ed = -2e9; //设置初始的开头和·结尾,范围大于题目区间范围即可。
for(auto seg:segs) //遍历
{
if(ed < seg.first)
{
if(ed != -2e9) res.push_back({st, ed}); //不是初始区间的话,将这个区间放入新容器。
st = seg.first; ed = seg.second; //更新区间
}
else
ed = max(ed, seg.second); //更新区间大小
}
if( st != -2e9) res.push_back({st, ed}); //这里将最后的区间放进容器。 st != -2e9是为了防止原容器为空(没有任何区间)。
segs = res;
}
int main()
{
cin >> n;
for (int i = 0; i < n; i ++ )
{
int l, r;
scanf("%d%d", &l, &r);
segs.push_back({l, r});
}
merge(segs);
printf("%d",segs.size());
}
本文来自博客园,作者:Medjay,转载请注明原文链接:https://www.cnblogs.com/Medjay/p/15790658.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步