算法学习——区间合并

Posted flydoggie

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法学习——区间合并相关的知识,希望对你有一定的参考价值。

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

技术图片

 

 

代码:

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

 

以上是关于算法学习——区间合并的主要内容,如果未能解决你的问题,请参考以下文章

片段(Java) | 机试题+算法思路+考点+代码解析 2023

排序算法详解

区间树算法,支持不重叠的区间合并

力扣算法题—056合并区间

贪心算法:合并区间

精LintCode领扣算法问题答案:1889. 区间合并