区间合并——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;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

nodejs湖北省智慧乡村旅游平台-计算机毕业设计源码00232

摘 要 随着科学技术的飞速发展&#xff0c;社会的方方面面、各行各业都在努力与现代的先进技术接轨&#xff0c;通过科技手段来提高自身的优势&#xff0c;旅游行业当然也不能排除在外。智慧乡村旅游平台是以实际运用为开发背景&#xff0c;运用软件工程开发方法&#xff0c;采…

探索JavaScript逆向工程与风控等级

探索JavaScript逆向工程与风控等级 在当今的网络安全领域&#xff0c;JavaScript逆向工程&#xff08;简称JS逆向&#xff09;已成为许多开发者和安全专家关注的焦点。JS逆向主要涉及对JavaScript代码的分析与理解&#xff0c;以发现其内部逻辑、数据流及潜在漏洞。这种技术常用…

【GIS】全球范围气象站点的逐年平均气温数据(1929-2023年)

数据简介&#xff1a;气象数据包括气象站点温度、湿度、光照等等。提供自1929-2023年以来的全球逐年平均气温数据气象数据下载。数据源为NCDC&#xff08;美国国家气候数据中心&#xff0c;National Climatic Data Center&#xff09;&#xff0c;隶属于NOAA&#xff08;美国国…

软件测试之购物车的用例设计

功能 正向case&#xff1a; 1、商品添加到购物车->选中添加的商品->点击结算->支付成功&#xff0c;验证购物车中订单是否清楚&#xff1b; 2、购物车中搜索商品&#xff0c;能够查询到对应的商品信息&#xff1b; 3、选中不同商家的商品&#xff0c;购物车中商品按照…

springboot热贡文化旅游APP的设计与实现-计算机毕业设计源码69932

摘 要 21世纪的今天&#xff0c;随着社会的不断发展与进步&#xff0c;人们对于信息科学化的认识&#xff0c;已由低层次向高层次发展&#xff0c;由原来的感性认识向理性认识提高&#xff0c;管理工作的重要性已逐渐被人们所认识&#xff0c;科学化的管理&#xff0c;使信息存…

bugku---misc---赛博朋克

1、下载附件解压之后是一个txt文本&#xff0c;查看文本的时候看到头部有NG的字样 2、把txt改为png后缀得到一张图片 3、binwalk没发现奇怪的地方&#xff0c;分离出来还是图片 4、stegslove分析&#xff0c;切换图片没有发现奇怪地方 5、将通道rgb置为0。出现了flag但是flag不…

Gi标签管理

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

6.13.1 使用残差神经网络堆叠集成进行乳腺肿块分类和诊断的综合框架

计算机辅助诊断 (CAD) 系统需要将肿瘤检测、分割和分类的自动化阶段按顺序集成到一个框架中&#xff0c;以协助放射科医生做出最终诊断决定。 介绍了使用堆叠的残差神经网络 (ResNet) 模型&#xff08;即 ResNet50V2、ResNet101V2 和 ResNet152V2&#xff09;进行乳腺肿块分类…

郑州企业水污染防治乙级资质申请,时长预估

针对郑州企业水污染防治乙级资质申请&#xff0c;时长预估如下&#xff1a; 一、前期准备阶段 时间预估&#xff1a;约1-2个月 了解并熟悉最新的水污染防治乙级资质申请政策和标准。评估企业在技术人员配置、过往业绩、管理制度等方面的现状&#xff0c;确定是否满足申请条件。…

景芯SoC A72的时钟树分析

innovus的ctslog中的Clock DAG信息可以报出来CTS主要运行步骤的关键信息&#xff0c;比如clustering&#xff0c;balancing做完后的clock tree的长度&#xff0c;clock tree上所用的buffer、inverter&#xff0c;icg cell数量&#xff0c;clock skew等信息。我们以景芯SoC A72 …

美创科技入选“2024网络安全提供商创新排行榜”

近日&#xff0c;DBC德本咨询公布了“2024网络安全提供商创新排行榜”&#xff0c;美创科技凭借近20年的数据安全创新耕耘&#xff0c;荣誉上榜。 此次&#xff0c;与360、华为、腾讯等互联网、网络安全头部厂商并肩上榜&#xff0c;是行业对美创的再次认可。 数据安全的发展离…

Ubuntu 24.04 屏蔽snap包

Ubuntu 24.04 屏蔽snap包 屏蔽 这里所说的屏蔽指的是&#xff1a;禁止sudo apt install firefox时安装snap版本的包。 如需卸载snap&#xff0c;请使用关键词搜索。 命令行 cat <<EOF | sudo tee /etc/apt/preferences.d/snap-apps-disable Package: chromium* firef…

Typora 破解、激活!亲测有效!2024 最新激活方法

Typora 破解、激活&#xff01;亲测有效&#xff01;2024 最新激活方法 Typora是一款简单易用的Markdown编辑器。 Markdown是一种可以使用普通文本编辑器编写的标记语言&#xff0c;通过简单的标记语法&#xff0c;它可以使普通文本内容具有一定的格式&#xff0c;其目标是实现…

vite工程化搭建vue项目之自动按需导入

背景 当我们在使用vue3组合式开发的时候&#xff0c;大多数情况下我们的代码可能是这样的 <script setup lang"ts"> import { ref, reactive, toRefs, onMounted, computed } from vue; defineProps({}); </script><template><div></di…

BigDecimal的这四个大坑,你都知道吗?

BigDecimal是Java中的一个类&#xff0c;提供了更精确的数字运算&#xff0c;在金融场景中经常使用到。在使用BigDecimal的时候一定要注意&#xff0c;否则可能会付出惨重的代价。 第一&#xff1a;初始化的坑 BigDecimal a new BigDecimal(0.01); BigDecimal b new BigDec…

计算机毕业设计 | SpringBoot宠物医院管理 宠物商城购物系统(附源码)

写在前面 Le Dao宠物医院管理系统是一个超大型的&#xff0c;完成度很高的&#xff0c;集宠物医疗、宠物美容、宠物交易、宠物周边等各种功能于一身的&#xff0c;权限涵盖普通用户、医生、化验师、美容师、仓库主管、采购员等多种角色于一体的大型宠物医疗&#xff0c;购物系…

Conda安装

conda可以做到不同项目就用不同虚拟环境,这样就能做到每个项目的依赖包都是相互独立 一、windows Download Success | Anaconda 环境变量 二、nano 本次安装Archiconda的外部python版本为python3.7.1

适配器模式(AdapterPattern)

文章目录 1.适配器模式定义2.UML类图3.实现代码 1.适配器模式定义 使接口不兼容的对象能够相互合作 2.UML类图 目标角色&#xff08;Target&#xff09;&#xff1a;定义Client使用的与特定领域相关的接口。客户角色&#xff08;Client&#xff09;&#xff1a;与符合Targe…

从零开始搭建Electron项目(二)之例程解析

本专栏&#xff0c;前面学习了怎么下载例程并运行。 这里解析例程的构成 从零开始搭建Electron项目之运行例程-CSDN博客文章浏览阅读22次。最好的学习方式就是&#xff1a;给一段能够运行的代码示例。本文给出了例程资源&#xff0c;以及运行的步骤。在国内开发electron有一点特…

嵌入式linux中设备树使用of函数操作基本方法

各位开发者大家好,今天主要给大家分享一下,如何使用of操作函数,获取对应设备树节点先关的属性信息。 第一:of_find_property函数 of_find_property 函数用于在设备树中查找节点下具有指定名称的属性。如果找到了该属性,可以通过返回的属性结构体指针进行进一步的操作,比…