0
点赞
收藏
分享

微信扫一扫

区间合并(贪心)

笙烛 2022-02-03 阅读 174

思路:

1.按照所有区间的左端点从小到大进行排序

2.扫描所有区间的过程中把所有可能有交集的区间进行合并

题目:

代码:

#include<iostream>
#include<vector>
#include<algorithm>

using namespace std;

typedef pair<int,int> PII;
vector<PII> segs;

void merge(vector<PII>&segs)
{
    vector<PII> res;
    sort(segs.begin(),segs.end());

    int l = -2e9,r = -2e9;
    for(auto item:segs)
        if(r < item.first)
        {
            if(l != -2e9) res.push_back({l,r});
            l = item.first;
            r = item.second;
        }
        else r = max(r,item.second);

    if(l != -2e9) res.push_back({l,r});
    segs = res;
}

int main()
{
    int n;
    cin >> n;

    while(n--)
    {
        int l,r;
        scanf("%d%d",&l,&r);
        segs.push_back({l,r});
    }
    merge(segs);
    cout << segs.size() << endl;
    return 0;
}

 有关算法竞赛的题目会继续更新,欢迎评论交流!

举报

相关推荐

0 条评论