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

news2025/1/11 5:46:37

区间合并

定义

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

运用情况

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

注意事项

  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.coloradmin.cn/o/1820389.html

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

相关文章

AMS深入浅出

目标&#xff1a; 1. 一、AMS启动流程 ActivityManagerService是 安卓10 以后&#xff0c;将AMS拆分出ActivityTaskManagerService。 1.1 启动入口 AMS是由SystemServer进程启动&#xff0c;在启动过程 startBootStripService&#xff0c;会启动AMS和ATMS服务。 SystemSe…

关于学习Token、JWT、Cookie等验证授权方式的总结

目录 一、为什么Cookie无法防止CSRF攻击&#xff0c;而Token可以&#xff1f; 二、为什么无论采用Cookie-session的方式&#xff0c;还是Token&#xff08;JWT&#xff09;的方式&#xff0c;在一个浏览器里&#xff0c;同一个网站只能保证一个用户处于登录状态&#xff1f; …

阻容感的串联和并联

文章目录 电阻的串联电容的串联 电阻的串联 电容的串联 CC1C2/(C1C2) 串联后电容反而变小了&#xff0c;所以实际应用中&#xff0c;电容不串联&#xff08;我没见过电容串联使用的&#xff09; 类似于电导的分压&#xff0c; 电容一般是并联使用 电感一般串联使用

【Go】用 DBeaver、db browser 和 SqlCipher 读取 SqlCipher 数据库

本文档主要描述如何用 DBeaver、db browser 和 SqlCipher 上打开加密的 SQLite3 数据库(用 SqlCipher v3 加密) 软件版本 DBeaver&#xff1a;v24.1.0 SQLite-driver: sqlite-jdbc-3.46.0.0.jar dbbrowser-for-sqlite-cipher&#xff1a;3.12.2 SqlCipher cli(ubuntun)&am…

Honor of Kings 2024.06.13 (2)

【第一局】准确的说&#xff0c;其实对面优势更加明显&#xff0c;可惜黄忠和墨子喜欢杀人&#xff0c;而我又是不喜欢杀人的&#xff0c;打了好几次失误 【第二局】阵容本来很有优势&#xff0c;这个二呆射手跟第一局黄忠一样爱杀人&#xff0c;应该说三路的输出都爱杀人&…

Golang的GC

目录 介绍GC 概要 什么是根对象 三色标记法 什么情况下三色标记法会失效 屏障机制 “强-弱” 三色不变式 插入屏障 (强三色) 删除屏障(弱三色) Go 的混合写屏障机制 混合写屏障规则 介绍GC 概要 作用范围&#xff1a;只回收堆内存&#xff0c;不回收栈内存&#xf…

Stability AI发布新版文生图模型:依然开源

Stability AI最近发布了Stable Diffusion 3 Medium&#xff08;简称SD3 Medium&#xff09;&#xff0c;这是其最新的文生图模型&#xff0c;被官方称为“迄今为止最先进的开源模型”。SD3 Medium的性能甚至超过了Midjourney 6&#xff0c;特别是在生成手部和脸部图像方面表现出…

汇聚荣科技有限公司在拼多多评价上好不好?

汇聚荣科技有限公司在拼多多平台的评价如何&#xff0c;这是很多消费者在选择购买该公司产品时会关心的问题。通过深入分析&#xff0c;我们可以从多个维度来探讨这一问题。 一、产品质量 对于任何公司而言&#xff0c;产品的质量是其生存和发展的根本。根据用户反馈和相关评价…

Python的Pillow(图像处理库)非常详细的学习笔记

Python的Pillow库是一个非常强大的图像处理库。 安装Pillow库&#xff1a; 在终端或命令行中输入以下命令来安装Pillow&#xff1a; pip install pillow 安装后查看是否安装成功以及当前版本 pip show Pillow 升级库&#xff1a; pip install pillow --upgrade 一些基…

css入门基础

目录 1. CSS前景 2.什么是CSS 3.CSS发展史 4.CSS的3种样式格式 5.CSS 的语法 6.CSS的字体样式 7.选择器类型 8.CSS外观属性 1. CSS前景 从HTML被发明开始&#xff0c;样式就以各种形式存在。不同的浏览器结合它们各自的样式语言为用户提供页面效果的控制。最初的HTML只…

【我是产品经理_注册安全分析报告】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造成亏损无底洞 …

JavaScript的函数(几种函数的定义和使用)

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

UKP3D用户定制图框的思路

为用户定制图框&#xff0c;记录以下图框制作方法&#xff0c;便于用户自已修改。 1.轴测图与平面图的图框&#xff1a; 1.1.图框在安装目录下&#xff0c;例如&#xff1a;E:\Program Files (x86)\UKSoft\UKP3d9.2\config\TemplateAndBlock\CADTemplate\ 1.2.配置文件在安装…

Qt creator day1 练习

自由发挥登录窗口的应用场景&#xff0c;实现一个登录窗口界面&#xff0c;要求&#xff1a;第行代码都有注释 #include "mywidget.h"MyWidget::MyWidget(QWidget *parent): QWidget(parent) {this->setWindowTitle("贪玩蓝月——是兄弟就来砍我 登入&#…

Google play,应用被下架,活跃用户断崖式下跌?

相信在Google paly上架应用的开发者&#xff0c;都经历过应用被下架的情况。不少开发者吐槽&#xff0c;应用被下架之后&#xff0c;前期推广积累的活跃用户也会一个星期内断崖式下跌&#xff0c;这就很难搞了&#xff0c;严重影响了收益。 &#xff08;想与众多开发者交流谷歌…

Armbian OS(基于ubuntu24) 源码编译mysql 5.7

最近弄了个S905X3的盒子刷完Armbian OS &#xff08;基于ubuntu24&#xff09;&#xff0c;开始折腾Arm64之旅。第一站就遇到了MySQL的问题&#xff0c;由于MySQL没有提供Arm64版本&#xff0c;又不想塞Docker镜像&#xff0c;因此选择源码来编译MySQL5.7。下面记录详细过程和遇…

磁盘管理 以及磁盘的分区 详细版

磁盘管理 track:磁道&#xff0c;就是磁盘上同心圆&#xff0c;从外向里&#xff0c;依次1号、2号磁道sector&#xff1a;扇区&#xff0c;将磁盘分成一个一个扇形区域&#xff0c;每个扇区大小是512字节&#xff0c;从外向里&#xff0c;依次是1号扇区、2号扇区cylinder&…

swift5 在当前控制器先dismiss后pop

如下图需要在present当前控制器时用全局变量firmwareUpgradePresentingVC先引用上一个控制器&#xff08;下面的代码亲测有效&#xff09; func dismissAndPop() {self.dismiss(animated: false) {firmwareUpgradePresentingVC.navigationController!.popViewController(animat…

比利时海外媒体宣发,发稿促进媒体通稿发布新形势-大舍传媒

引言 随着全球化的推进&#xff0c;海外媒体的影响力也日益增强。在这一背景下&#xff0c;比利时海外媒体的宣发工作成为了媒体通稿发布的新形势。大舍传媒作为一家专注于宣传推广的公司&#xff0c;一直致力于与比利时博伊克邮报&#xff08;boicpost&#xff09;合作&#…

ubuntu软件安装

目录 更新Ubuntu软件下载地址 1. 寻找国内镜像源 2. 备份Ubuntu默认的源地址 3. 更新源服务器列表 4. 更新源 更新Ubuntu软件下载地址 1. 寻找国内镜像源 所谓的镜像源&#xff1a;可以理解为提供下载软件的地⽅&#xff0c;⽐如 Android ⼿机上可以下载软件的 91 ⼿机助…