码迷,mamicode.com
首页 > 编程语言 > 详细

算法学习——区间合并

时间:2020-01-31 00:42:27      阅读:123      评论:0      收藏:0      [点我收藏+]

标签:cin   std   alt   class   src   air   code   merge   并且   

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

技术图片

 

 

代码:

#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;
}

 

算法学习——区间合并

标签:cin   std   alt   class   src   air   code   merge   并且   

原文地址:https://www.cnblogs.com/Flydoggie/p/12244272.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!