前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >基础算法——区间合并

基础算法——区间合并

作者头像
秋名山码神
发布2022-12-13 14:52:32
2140
发布2022-12-13 14:52:32
举报
文章被收录于专栏:码神随笔

秋名山码民的主页 🎉欢迎关注🔎点赞👍收藏⭐️留言📝 🙏作者水平很有限,如果发现错误,一定要及时告知作者

前言

由于有些读者朋友私聊我,希望出几期基础算法的讲解,kmp,dp,哈希,搜索,贪心等对初学者还是不太友好,所以我打算更新几期基础算法合集,没办法谁让我宠粉丝呢?彦祖,热巴说你呢,快关注!

目录大致如下:

排序(十大排序)——已经讲过 高精度算法 从0->1入门双指针 前缀和 二分 位运算 区间合并

何为区间合并?

区间合并,肯定是要有区间的,我们先来说什么是区间:

何为区间

区间一般有一个左端点一个右端点

在这里插入图片描述
在这里插入图片描述

我们可以使用一个结构体来定义,其中既包括左节点,也包括右节点

代码语言:javascript
复制
struct Interval {
    int left, right;
};

区间合并

上面我们说明了什么是区间,接下来我们来说什么是区间合并,

[[1,3],[2,6],[8,10],[15,18]]

合并为:[[1,6],[8,10],[15,18]]

区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6]

也就是有交集的区间进行一个合并

区间左端点排序 start,end进行维护

在这里插入图片描述
在这里插入图片描述

三种情况, 1.在其中 不用动了

在这里插入图片描述
在这里插入图片描述

2.超过 维护区间变长

在这里插入图片描述
在这里插入图片描述

3.不在其中(没有交集) 直接导出来,更新区间

在这里插入图片描述
在这里插入图片描述

我们来看代码的实现:

代码语言:javascript
复制
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std ;
typedef pair<int,int> pii ;
vector<pii> nums,res ;
int main()
{
    int st=-2e9,ed=-2e9 ;                           //ed代表区间结尾,st代表区间开头
    int n ;
    scanf("%d",&n) ; 
    while(n--)
    {
        int l,r ; 
        scanf("%d%d",&l,&r) ;
        nums.push_back({l,r}) ;
    }
    sort(nums.begin(),nums.end()) ;                 //按左端点排序
    for(auto num:nums)                   
    {
        if(ed<num.first)                            //情况1:两个区间无法合并
        {
            if(ed!=-2e9) res.push_back({st,ed}) ;   //区间1放进res数组
            st=num.first,ed=num.second ;            //维护区间2
        }
        //情况2:两个区间可以合并,且区间1不包含区间2,区间2不包含区间1
        else if(ed<num.second)  
            ed=num.second ;                         //区间合并
    }  


    //注:排过序之后,不可能有区间2包含区间1

    if(st!=-2e9&&ed!=-2e9) res.push_back({st,ed});

    //考虑循环结束时的st,ed变量,此时的st,ed变量不需要继续维护,只需要放进res数组即可。因为这是最后的一个序列,所以不可能继续进行合并。


    printf("%d",res.size()) ;           //输出答案
    return 0 ;
}

最后

基本算法今天就是收官之战了,还是老样子,求个三连,让孩子上个热榜吧!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-03-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 何为区间合并?
    • 何为区间
      • 区间合并
      • 最后
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档