区间合并——Acwing.803区间合并

区间合并

定义

区间合并是指将一组有重叠或相邻的区间合并成一个或多个更大的区间。

运用情况

  • 图像处理:在图像的区域分析中,可能需要将相邻的具有相似特征的区域进行合并。
  • 时间区间处理:比如将多个连续时间段进行合并。
  • 行程规划:对一系列行程区间进行整理和合并。
  • 资源分配:当涉及到对一些连续的资源区间进行整合和管理时。
  • 几何计算:在一些几何问题中,对相关的区间进行合并操作以简化计算。
  • 数据压缩:通过合并相似的区间来减少数据量。
  • 任务调度:对任务的时间区间进行合理合并和安排。

注意事项

  1. 区间的表示方式:需要明确区间的表示方法,例如使用起始值和结束值来表示一个区间。
  2. 边界情况处理:在合并区间时,需要考虑边界情况,例如区间的起始值和结束值相等的情况。
  3. 区间的排序:在进行区间合并之前,通常需要对区间进行排序,以便按照一定的顺序进行合并操作。
  4. 结果的正确性:需要确保合并后的区间结果是正确的,并且符合预期的合并规则。

解题思路

  1. 对区间进行排序,以便按照起始值进行顺序处理。
  2. 初始化一个空的结果列表,用于存储合并后的区间。
  3. 遍历排序后的区间列表,对于每个区间:
    • 如果结果列表为空,或者当前区间与结果列表中的最后一个区间不重叠,则将当前区间添加到结果列表中。
    • 如果当前区间与结果列表中的最后一个区间重叠,则更新结果列表中最后一个区间的结束值为当前区间的结束值。
  4. 重复步骤 3,直到遍历完所有的区间。
  5. 返回合并后的区间结果列表。

Acwing.802区间和

题目描述

802. 区间和 - AcWing题库

运行代码

#include<bits/stdc++.h>
using namespace std;
typedef pair<int,int> PII;
vector<PII> a;
int n,cnt=1;
bool cmp(PII &a,PII &b){return a.first<b.first;
}
int main(){cin>>n;for(int i=0;i<n;i++){int l,r;cin>>l>>r;a.push_back({l,r});}sort(a.begin(),a.end(),cmp);for(int i=1,l=a[0].first,r=a[0].second;i<a.size();i++){if(a[i].first<=r) r=max(r,a[i].second);else{cnt++;l=a[i].first;r=a[i].second;}}cout<<cnt;return 0;
}

代码思路

  1. 引入头文件和类型定义:使用了<bits/stdc++.h>,这是一个非标准但常见的头文件,包含了C++标准库中的大部分内容。定义了typedef pair<int,int> PII;,将一对整数封装为一个类型,用于表示区间的左右端点。

  2. 变量声明:vector<PII> a; 用于存储输入的所有区间。int n, cnt = 1; 其中n存储区间数量,cnt初始化为1,用于计数最终的不重叠区间数。

  3. 读取输入数据:读取区间总数n,然后通过循环读取每个区间的左右端点lr,并以pair<int, int>的形式存储到向量a中。

  4. 区间排序:自定义比较函数cmp,按区间的左端点从小到大排序。使用sort(a.begin(), a.end(), cmp);对区间向量进行排序。

  5. 区间合并逻辑:

    • 初始化两个变量lr,分别记录当前合并区间段的左端点和右端点,初始值为排序后第一个区间的左右端点。
    • 遍历排序后的区间向量,对于每个区间,如果当前区间的左端点小于等于已合并区间的右端点,说明这两个区间重叠,此时更新合并区间的右端点为两者中较大的右端点。
    • 否则,说明当前区间与已合并区间不重叠,因此计数器cnt加1,表示又发现一个新的不重叠区间,并更新合并区间的左右端点为当前区间的端点。
  6. 输出结果:遍历结束后,输出计数器cnt的值,即为合并后的不重叠区间个数。

改进思路

  1. 删除无用的#include<bits/stdc++.h>:这是一个常用的头文件,包含了几乎所有标准库,但它不是一个标准的C++头文件,可能在某些编译环境中不可用。更推荐按需引入所需头文件,例如本例中只需<vector><iostream>

  2. 使用std::前缀:虽然使用了using namespace std;,但在实际项目中,避免使用整个命名空间以减少潜在的命名冲突风险。

  3. 变量命名:变量名可以更具描述性,如将lr改为leftright,提高代码可读性。

  4. 移除全局变量:尽量避免使用全局变量,改为在main函数内部定义并传递给相关函数,增强代码的模块性和可维护性。

  5. 直接在main中排序:由于cmp函数非常简单,且只在此处使用,可以考虑直接在sort函数调用中使用lambda表达式。

改进代码

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {int n;cin >> n;vector<pair<int, int>> intervals;for (int i = 0; i < n; ++i) {int left, right;cin >> left >> right;intervals.emplace_back(left, right);}// 直接在sort调用中使用lambda表达式简化代码sort(intervals.begin(), intervals.end(), [](const pair<int, int>& a, const pair<int, int>& b) {return a.first < b.first;});int cnt = 1;int prev_right = intervals[0].second;for (int i = 1; i < n; ++i) {if (intervals[i].first <= prev_right) {prev_right = max(prev_right, intervals[i].second);}else {++cnt;prev_right = intervals[i].second;}}cout << cnt << endl;return 0;
}

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

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

相关文章

发布中文文档类资源仓库-ChineseDocumentPDF

引言 今天中午&#xff0c;排队打饭间隙&#xff0c;刷到新闻&#xff0c;说是&#xff1a;360AILAB-NLP团队开源了中文论文、研报文档场景的轻量化版式分析模型360LayoutAnalysis。 面向中文论文及研报两个场景的轻量化版式分析模型已经开源&#xff1a; Github地址&#x…

Gi标签管理

文章目录 前言理解标签创建标签操作标签总结 前言 理解标签 标签&#xff0c;可以理解为对某次commit的一次标识&#xff0c;相当于起起了一个别名。 例如&#xff0c;在项目发布某个版本时候&#xff0c;针对最后一次commit起一个v1.0这样的标签来标识里程碑的意义。 这有什…

论文《Federated Social Recommendation with Graph Neural Network》阅读

论文《Federated Social Recommendation with Graph Neural Network》阅读 论文概况IntroMethodology问题形式化FeSoG本地图设计本地差分隐私Pseudo-Item Labeling 模型优化模型训练 论文总结 论文概况 今天总结一下最近阅读的关于联邦社会化推荐的论文《Federated Social Rec…

第五讲:51单片机+RA8889驱动控制彩屏 完整源码说明 【 源码v1.2 】

51单片机驱动控制彩屏系列讲座 第一讲&#xff1a;单片机STC89C52RA8889驱动控制彩屏【 源码v1.0 】 第二讲&#xff1a;单片机STC89C52RA8889驱动控制彩屏 代码移植介绍 第三讲&#xff1a;单片机STC89C52RA8889驱动控制彩屏 代码的压缩&#xff08;Keil编译器&#xff09; 第…

phpstudy的安装dvwa

phpstudy安装dvwa 1. 下载phpstudy Windows版phpstudy下载 - 小皮面板(phpstudy) (xp.cn) 2. 搭建dvwa靶场 下载地址&#xff1a;https://github.com/ethicalhack3r/DVWA/archive/master.zip 将其放入www文件夹中 3. 修改配置文件 将\DVWA-master\config中config.inc.php…

STL-常用容器

3.1.1. string基本概念 本质&#xff1a; string是C风格的字符串&#xff0c;char*是C语言风格的字符串string本质上是一个类 string和char*的区别&#xff1a; char*是一个指针string是一个类&#xff0c;类内部封装并负责管理char*&#xff0c;是一个char*型的容器 特点&a…

ISCC2024 winterbegins

首先&#xff0c;用IDA打开程序&#xff0c;看到一大堆while(1)又套着while(1)的结构&#xff0c;肯定是控制流平坦化了&#xff0c;我们可以使用IDA插件d810去掉。 现在程序就好看多了。如果IDA没有显示这堆中文字符串&#xff0c;可以考虑使用IDA8.3&#xff0c;就可以显示…

stm32_HAL_CAN(特点:广播试,检测线路是否空,id有优先级)

UART I2C SPI 介绍 CAN&#xff08;Controller Area Network&#xff09;接口是一种常用于嵌入式系统中的通信接口&#xff0c;尤其在汽车和工业领域。它由Robert Bosch GmbH在1986年开发&#xff0c;旨在提供一种可靠、高效、灵活的车载通信网络。CAN总线的主要 特点包括&am…

eNSP学习——配置高级的访问控制列表

目录 主要命令 原理概述 实验目的 实验内容 实验拓扑 实验编址 实验步骤 1、基本配置 2、搭建OSPF网络 3、配置Telnet 4、配置高级ACL控制访问 需要eNSP各种配置命令的点击链接自取&#xff1a;华为&#xff45;NSP各种设备配置命令大全PDF版_ensp配置命令大全资源-…

数据结构01 栈及其相关问题讲解

栈是一种线性数据结构&#xff0c;栈的特征是数据的插入和删除只能通过一端来实现&#xff0c;这一端称为“栈顶”&#xff0c;相应的另一端称为“栈底”。 栈及其特点 用一个简单的例子来说&#xff0c;栈就像一个放乒乓球的圆筒&#xff0c;底部是封住的&#xff0c;如果你想…

【简单介绍下Sass,什么是Sass?】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…

Linux:多线程的操作

多线程操作 进程与线程线程的创建 create_pthread创建线程池给线程传入对象的指针 线程等待 pthread_join退出线程 pthread_exit线程等待参数 retval 与 线程退出参数 retval 线程中断 pthread_cancel获取线程编号 pthread_self线程分离 pthread_detach 进程与线程 进程是资源…

史上最全,呕心沥血总结oracle推进SCN方法(八)

作者介绍&#xff1a;老苏&#xff0c;10余年DBA工作运维经验&#xff0c;擅长Oracle、MySQL、PG数据库运维&#xff08;如安装迁移&#xff0c;性能优化、故障应急处理等&#xff09; 公众号&#xff1a;老苏畅谈运维 欢迎关注本人公众号&#xff0c;更多精彩与您分享。前面介…

17-C语言中的变量生命周期——自动存储期、青苔存储期、自定义存储期

17-C语言中的变量生命周期——自动存储期、青苔存储期、自定义存储期 文章目录 17-C语言中的变量生命周期——自动存储期、青苔存储期、自定义存储期一、自动存储期示例 二、静态存储期2.1 示例 三、自定义存储期3.1 如何申请内存3.2 如何释放内存3.3 如何清空内存3.4 示例 概念…

MQTT通讯协议接入

1.MQTT协议概述 MQTT是一种基于发布/订阅模式的轻量级消息传输协议&#xff0c;常用于低带宽、不可靠网络环境下传输消息&#xff0c;适用于物联网设备之间的通信。 1.1 MQTT协议的组件 客户端&#xff08;Client&#xff09;&#xff1a;连接到MQTT代理服务器的设备&#xff…

计算机组成原理(六)

0x12345678和12345678H都是指同一个十六进制,也就是12345678&#xff0c;不过是不同的编程语言的写法而已 具体来说&#xff0c;如果有 n 根地址线&#xff0c;计算机可以寻址的内存空间大小是 2^n 字节。 24根地址线&#xff1a; 如果一个系统有24根地址线&#xff0c;意味着它…

汇编程序设计之 位操作指令、顺序程序设计

文章目录 位操作类指令逻辑运算指令NOTORANDXORTEST 移位指令逻辑移位算数移位循环移位指令 处理机控制类指令顺序结构程序设计概念例子 位操作类指令 逻辑运算指令 NOT OR 对于每一个位&#xff0c;有1即为1 AND 同时为1才是1 XOR 不相同才为1 TEST 和and 一样的功能&…

RK3568技术笔记六 新建 Ubuntu Linux 虚拟机

VMware 安装完成后&#xff0c;启动 VMware 软件。启动后在 VMware 主界面点击“创建新的虚拟机”。如下图所示&#xff1a; 开始对新建的虚拟机进行设置。选择“自定义”&#xff0c;然后点击“下一步”。如下图所示&#xff1a; 使用默认配置&#xff0c;单击“下一步”。如下…

PyTorch -- 最常见激活函数的选择

首先&#xff0c;简单复习下什么是梯度&#xff1a;梯度是偏微分的集合 举例说明&#xff1a;对于 z y 2 − x 2 : ∇ z ( ∂ z ∂ x , ∂ z ∂ y ) &#xff08; 2 x , 2 y &#xff09; z y^2-x^2: \nabla z (\frac{\partial z}{\partial x}, \frac{\partial z}{\partia…

夏日炎炎 水域守护:北斗守护安全防线——为生命撑起智能保护伞

随着夏季的来临&#xff0c;炎热的天气让许多人纷纷寻求水的清凉。清凉的河流与广阔的海域成为了不少人消暑降温的向往之地。然而&#xff0c;私自下河、下海的行为却暗藏着巨大的安全隐患&#xff0c;每年夏季溺水事故频发&#xff0c;给无数家庭带来不可挽回的悲痛。为有效遏…