算法学习——区间合并

区间合并就是将坐标轴中两个存在交集的区间合并成一个区间。

代码:

#include<bits/stdc++.h>
using namespace std;

const int N = 1000010;
typedef pair<int,int> PII;
//用来存放区间的左右端点
vector<PII>seg;

int n,l,r;

//合并区间操作函数
int merge(){
    //存放合并完成后的区间的数组
    vector<PII>res;
    //初始化区间的范围
    int l = -2e9, r = -2e9;
    //枚举有交集的区间
    for(auto s:seg){
        //假如当前区间和枚举区间不存在交集
        if(r < s.first){
            //判断是否为空,若非空则插入区间到结果集
            if(l != -2e9) res.push_back({l,r});
            //修改当前区间的范围
            l = s.first;
            r = s.second;
        }else{
            //将该区间合并到当前区间中
            r = max(r,s.second);
        }
        
    }
    //判断最后一个区间是否为空
    if(l != -2e9) res.push_back({l,r});
    
    return res.size();
    
}


int main(){
    cin>>n;
    for(int i = 0 ; i < n ;i ++ ){
        //读入区间并且放入容器中
        cin>>l>>r;
        seg.push_back({l,r});
    }
    
    //预处理区间
    sort(seg.begin(),seg.end());
    //输出结果
    cout<<merge()<<endl;
    
    
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/Flydoggie/p/12244272.html