区间合并【pair、sort】

news2025/1/4 15:48:22

有交集(包括端点)的区间进行合并
802. 区间和 - AcWing题库

例如,现在有这样一个数据

1 2
2 4 
5 6
7 8
7 9

最终合并的结果就是

  • 1 —— 4
  • 5 —— 6
  • 7 —— 9

得到三个区间

第一步:按照区间左端点排序

第二步:扫描整个区间(扫描过程中,合并区间)

维护当前的区间,例如

  • 左端点:st
  • 右端点:ed

存在以下几种情况

区间内

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GKGtoKS3-1684419626980)(assets/image-20230518220234-4jwf4c8.png)]

在这种情况下,st和ed都不需要变化

有交集

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kS6yDHMT-1684419626981)(assets/image-20230518220336-2lqk3s9.png)]

此时修改ed,也就是这样

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dwZO18qG-1684419626981)(assets/image-20230518220442-cuhs6q2.png)]

没有交集

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5Jgnkrjy-1684419626982)(assets/image-20230518220401-p41euf7.png)]

因为前面已经将左端点 从小到大 排序,所以很后面的情况只会在紫色点后面,而不会出现在前面

  • 然后将此时的st和ed放入答案中
  • 并更新st和ed

解决代码

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

using namespace std;


typedef pair <int , int > pii;

vector<pii> nums;

void merge(vector<pii> &nums){
    vector<pii> res;
  
    int st = -2e9 , ed = -2e9;
  
    for(auto item : nums){
      
        if(item.first > ed){
            if(st != -2e9) res.push_back({item.first , item.second});
          
            st = item.first , ed = item.second;
          
        }else{
            ed = max(ed , item.second);
        }
      
    }
  
    if(st != -2e9){
        res.push_back({st , ed});
    }
  
    nums = res;
  
}

int main(){
    int n ;
  
    cin >> n;
  
    int l , r;
  
    for(int i = 0 ; i <n ; i ++){
        cin >> l >> r;
        nums.push_back({l , r});
    }
  
    sort(nums.begin() , nums.end());
  
    merge(nums);
  
    cout << nums.size();
  
    return 0;
}

使用pair存放左右端点

  • first:左端点
  • second:右端点
typedef pair <int , int > pii;

vector<pii> nums;

区间合并模板

sort排序时,是默认排序first,当first相等时,排序second

void merge(vector<pii> &nums){
    vector<pii> res;
  
    int st = -2e9 , ed = -2e9;
  
    for(auto item : nums){
      
        if(item.first > ed){
            if(st != -2e9) res.push_back({item.first , item.second});
          
            st = item.first , ed = item.second;
          
        }else{
            ed = max(ed , item.second);
        }
      
    }
  
    if(st != -2e9){
        res.push_back({st , ed});
    }
  
    nums = res;
  
}
  • 设置默认值为2e9,因为题目默认为109

  • 当前区间严格在 维护区间 左边

    ——(对应没有交集的情况)

  • 在区间里面

    (对应有交集 + 区间内)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/542103.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【C++初阶】:模板初阶

模板初阶 一.函数模板1.简单使用2.模板原理3.函数模板的实例化4.模板参数的匹配原则 二.类模板1.基本格式2.类模板实例化 一.函数模板 1.简单使用 函数模板代表了一个函数家族&#xff0c;该函数模板与类型无关&#xff0c;在使用时被参数化&#xff0c;根据实参类型产生函数的…

【OJ比赛日历】快周末了,不来一场比赛吗? #05.20-05.26 #10场

CompHub[1] 实时聚合多平台的数据类(Kaggle、天池…)和OJ类(Leetcode、牛客…&#xff09;比赛。本账号会推送最新的比赛消息&#xff0c;欢迎关注&#xff01; 以下信息仅供参考&#xff0c;以比赛官网为准 目录 2023-05-20&#xff08;周六&#xff09; #4场比赛2023-05-21…

关于Compilation failed: internal java compiler error的解决方法(Idea)

**idea编译项目时出现java: Compilation failed: internal java compiler error java:编译失败&#xff1a;内部java编译器错误 根本原因基本上有两个&#xff0c;一个jdk版本问题&#xff0c;一个堆栈不足问题&#xff0c;我这次就是堆栈不足导致的&#xff1b; 1、项目过大…

IDOIEO盘点,包括PoseiSwap等即将面向市场的潜力打新活动

本月即将推出几个值得关注的打新活动一览&#xff1a; 项目名&#xff1a;PoseiSwap 官网&#xff1a;poseiswap.xyz PoseiSwap 是 Nautilus Chain 上的首个 DEX&#xff0c; Nautilus Chain 作为目前行业内第一个并行化且运行速度最快EVM Rollup的L3扩容方案&#xff0c;其将…

如何反转ggplot2中的图例键顺序

动动发财的小手&#xff0c;点个赞吧&#xff01; 在本教程[1]中&#xff0c;我们将学习如何反转 ggplot2 中图例键的顺序。 在 ggplot2 中&#xff0c;当我们在 aes() 中使用颜色或填充参数为变量着色时&#xff0c;我们会得到一个带有键的图例&#xff0c;显示哪些键匹配哪些…

蓝奏云直链解析

[玫瑰]蓝奏云直链获取在线解析网站源码 蓝奏云链接解析 本地API接口 [玫瑰]支持有无密码和短期直链和永久直链&#xff0c;同时还可以显示文件名和大小。 [玫瑰]这个解析器无需数据库即可搭建&#xff0c;API接口已经本地化&#xff0c;非常简单易用。 [玫瑰]解压密码 123321 链…

zotero-style 摸索

打开zotero-编辑-首选项-style 可以看到图中所示的function界面 标签 刚安装好的时候原来自带的标签都不显示了&#xff0c;重启也没用&#xff0c;原来是不要勾选function下的title就好了 还有一种解决方法是&#xff0c;同时勾选title和tag&#xff0c;然后在标题栏右键&am…

【数据结构】堆(Heap)

文章目录 前言一、堆1、 概念2、性质3、结构 二、堆的实现1、算法实现&#xff1a;向下调整算法向上调整算法(堆的创建)堆的插入堆的删除堆的排序 2、 代码实现(小堆)&#xff1a;堆的定义交换检查容量向下调整向上调整堆的初始化堆的创建销毁堆堆的插入堆的删除获取堆顶元素判…

Linux下C/C++实现DNS查询(DNS QUERY)

DNS 的全称是 Domain Name System 或者 Domain Name Service&#xff0c;它主要的作用就是将人们所熟悉的网址 (域名) “翻译”成电脑可以理解的 IP 地址&#xff0c;这个过程叫做 DNS 域名解析。域名是由一串用点分隔的名字组成的 Internet 上某一台计算机或计算机组的名称&am…

Linux维护安全-PHP安全-php高危函数禁用-php必需禁用的最高危函数总结-必禁

Linux维护安全-PHP安全-php高危函数禁用-php必需禁用的最高危函数总结&#xff0c;优雅草松鼠蜻蜓系统安装必须开启proc_open,putenv&#xff0c;但是希望大家在安装完成后一定要禁用。 必须禁用的高危函数&#xff1a; system,exec,passthru,shell_exec,popen,proc_open,pute…

国考省考行测:数量关系,十字交叉法,增长率反应去年的量,浓度反应的是浓液,平均反应的是人数

国考省考行测&#xff1a;十字交叉法 2022找工作是学历、能力和运气的超强结合体! 公务员特招重点就是专业技能&#xff0c;附带行测和申论&#xff0c;而常规国考省考最重要的还是申论和行测&#xff0c;所以大家认真准备吧&#xff0c;我讲一起屡屡申论和行测的重要知识点 遇…

3网络互联-3.5【实验】【计算机网络】

3网络互联-3.5【实验】【计算机网络】 前言推荐3网络互联3.4 IP分组转发与静态路由3.5 动态路由配置及RIP协议分析实验目的实验内容及实验环境实验原理1. RIP协议2.RIP分组格式3.RIP协议工作原理 实验过程1&#xff0e;搭建一个多跳网络拓扑&#xff0c;配置RIP协议参数2&#…

【ONE·C++ || 哈希(一)】

总言 主要介绍哈希基本框架及其unordered系列容器简述。 文章目录 总言0、思维导图1、unordered系列介绍2、底层&#xff1a;哈希2.1、哈希概念介绍&#xff1a;哈希(散列)函数和哈希表(散列表)2.2、映射关系建立与问题说明&#xff1a;除留余数法、哈希冲突2.3、闭散列及其实…

企业邮箱解析:为何它是企业必备的高效沟通工具?

企业家都知道&#xff0c;一个一致的品牌可以提高它在人们心中的可靠性。这就是为什么大多数企业投资于他们的网络和企业邮箱提供商的原因&#xff0c;可以体现品牌正规性。 企业邮箱为您提供与您的域名匹配的企业电子邮件(nameyourbusiness.com)。它还为您提供&#xff1a; 1、…

【HelloWorld篇】深入学习Spring-Boot

前言 该专栏用来记录一下深入学习SpringBoot&#xff0c;了解SpringBoot如何扩展、如何自定义编写属于自己的start&#xff0c;了解 AOP&#xff0c;IOC&#xff0c;过滤器&#xff0c;拦截器&#xff0c;注解&#xff0c;定时器等实际开发用到的场景以及如何整合第三方&#…

Vivado综合属性系列之六 MAX_FANOUT

目录 一、前言 二、MAX_FANOUT ​ ​2.1 工程代码 ​ ​2.2 工程结果 ​ 一、前言 ​ ​在时序违例的工程中&#xff0c;有一个很常见的原因&#xff1a;高扇出&#xff0c;此时就需要降低信号的扇出&#xff0c;可通过属性MAX_FANOUT来控制信号的扇出值&#xff…

32.Git分布式版本控制

目录 一、Git分布式版本控制。 &#xff08;1&#xff09;Git简介。 &#xff08;2&#xff09;Git工作流程图。 &#xff08;3&#xff09;Git安装。 &#xff08;4&#xff09;Git基本配置。 &#xff08;4.1&#xff09;用户信息配置&#xff08;不一定是真实的信息&a…

RK3568平台开发系列讲解(项目篇)手写数字识别

🚀返回专栏总目录 文章目录 一、安装飞桨(PaddlePaddle)二、手写数字识别任务2.1、准备训练集和测试集2.2、模型组网2.3、模型训练与评估2.4、模型保存和导出ONNX模型2.5、完整程序2.6、模拟推理和导出RKNN模型三、板端部署推理3.1、安装RKNN Toolkit Lite2和相关库3.2、推…

从零开始学习JVM(五)-运行时数据区的方法区

1. 方法区基本介绍 官方文档&#xff1a;The Java Virtual Machine Specification 《Java虚拟机规范》中明确说明&#xff1a;“尽管所有的方法区在逻辑上是属于堆的一部分&#xff0c;但一些简单的实现可能不会选择去进行垃圾收集或者进行压缩。”但对于HotSpotJVM而言&…

手写简易RPC框架

目录 简介 服务提供者 服务注册&#xff1a;注册中心 HttpServerHandler处理远程调用请求 consumer服务消费端 简介 RPC&#xff08;Remote Procedure Call&#xff09;——远程过程调用&#xff0c;它是一种通过网络从远程计算机程序上请求服务&#xff0c; 而不需要了解…