区间合并笔记

文章目录

  • 什么是区间合并
  • 怎么做区间合并
  • AcWing 803. 区间合并
    • 思路解析
    • my - CODE
    • dalao の CODE



什么是区间合并

区间合并是指给定多个区间,让你将重合的区间合并为一个区间


怎么做区间合并

区间合并类问题大多三个办法:

  • 按左端点排序
  • 按右端点排序
  • 按左右端点双值排序

AcWing 803. 区间合并

题目链接:https://www.acwing.com/activity/content/problem/content/837/
区间和

思路解析

  • 我们按左端点大小将区间排序,排完序后从每个区间左端点开始遍历,我们会发现有三种情况
    • B区间在A
    • C区间有一部分与A重合
    • D区间在A
      三种情况
  • 我们的思路很明了了,通过两个指针:st(start),ed(end) 来标记我们正在维护的A数组的左右端点,往后遍历,处理三种情况
    • 如果遇到B:左端点不动,右端点也不动
    • 如果遇到C:左端点不动,右端点更新为C的右端点,也就是将A,C区间合并了
    • 如果遇到D:左右端点更新为D的左右端点,相当于现在改为维护D区间

my - CODE

#include <iostream>
#include <cstring>
#include <algorithm>
#include <vector>using namespace std;typedef pair<int, int> pii;vector<pii> segs;			// 存储区间左右端点int main()
{int n, l, r;int ans = 0;cin >> n;while (n -- ){scanf("%d%d", &l, &r);segs.push_back({l, r});}sort(segs.begin(), segs.end());		// 以左端点优先排序int st = -1e9 - 1, ed = -1e9 - 1;	// 一开始的区间初始化为一个不可能的区间for(auto seg : segs){if(seg.first <= ed) ed = max(ed, seg.second);	// 有重合,右端点取最大else{			// 无重合,更新维护的区间ans++;st = seg.first;ed = seg.second;}}cout << ans << endl;
}

dalao の CODE

#include <iostream>
#include <vector>
#include <algorithm>using namespace std;typedef pair<int, int> PII;void merge(vector<PII> &segs)
{vector<PII> res;sort(segs.begin(), segs.end());int st = -2e9, ed = -2e9;for (auto seg : segs)if (ed < seg.first){if (st != -2e9) res.push_back({st, ed});st = seg.first, ed = seg.second;}else ed = max(ed, seg.second);if (st != -2e9) res.push_back({st, ed});segs = res;
}int main()
{int n;scanf("%d", &n);vector<PII> segs;for (int i = 0; i < n; i ++ ){int l, r;scanf("%d%d", &l, &r);segs.push_back({l, r});}merge(segs);cout << segs.size() << endl;return 0;
}作者:yxc
链接:https://www.acwing.com/activity/content/code/content/40108/
来源:AcWing
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  • dalao将合并统计区间的过程抽出来单独写了个merge()函数,复用性和可读性更强
  • 而且将合并后的区间按秩存入了一个res空间,对于本题可能没有卵用,但是在其他区间合并问题中可能会用到合并后的区间
  • 不愧是dalao啊,orz %%%%%%

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

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

相关文章

企业微信ipad版,http协议接口发开,获取客户群列表

版本介绍&#xff1a; HTTP协议接口可以通过该接口实现企业微信的各种功能&#xff0c;使用HTTP协议可以避免使用hook形式的需要开启PC客户端的方式&#xff0c;同时可以实现三端同时在线&#xff0c;不影响PC和手机端的登录状态&#xff0c;调用简单&#xff0c;可以支持几千…

Apache Doris 整合 FLINK CDC 、Paimon 构建实时湖仓一体的联邦查询入门

1.概览 多源数据目录&#xff08;Multi-Catalog&#xff09;功能&#xff0c;旨在能够更方便对接外部数据目录&#xff0c;以增强Doris的数据湖分析和联邦数据查询能力。 在之前的 Doris 版本中&#xff0c;用户数据只有两个层级&#xff1a;Database 和 Table。当我们需要连…

一键删除方舟编译器缓存文件js、js.map插件ArkCompilerSupport

新手学习鸿蒙开发&#xff0c;发现DevEco Studio编译过种会生成js、js.map&#xff0c;在论坛上看了其它开发者也提了问题但无没解决&#xff0c;写了一个插件大家试下&#xff1a; https://plugins.jetbrains.com/plugin/23192-arkcompilersupport 源码&#xff1a;https://g…

js 如何实现转驼峰处理

目录 1&#xff0c;需求2&#xff0c;实现和原理3&#xff0c;原理1&#xff0c;正则2&#xff0c;替换函数 1&#xff0c;需求 在开发中&#xff0c;有时需要将中划线 -&#xff0c;下划线 _&#xff0c;冒号 : 这些连接符转为驼峰形式。 如果只有一个连接符&#xff0c;处理…

深度学习——Loss汇总

深度学习——Loss汇总 一、IOU Loss二、L1 Loss 一、IOU Loss 公式&#xff1a; 参考资料: 目标检测回归损失函数——IOU、GIOU、DIOU、CIOU、EIOU 二、L1 Loss 公式&#xff1a; 参考资料: PyTorch中的损失函数–L1Loss /L2Loss/SmoothL1Loss

Day72x.算法训练

739. 每日温度 class Solution {public int[] dailyTemperatures(int[] temperatures) {LinkedList<Integer> st new LinkedList<>();st.push(0);int[] res new int[temperatures.length];for (int i 1; i < temperatures.length; i) {while (!st.isEmpty()…

python机器学习——简单神经网络算法回归分析

利用python实现简单的神经网络算法回归分析 2023年亚太杯数学建模C题可以使用这个代码进行分析 import pandas as pd import numpy as np from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler from tensorflow.keras.mod…

智慧城市大脑,运维无忧!

运维管理软件在智慧城市中发挥着重要的作用&#xff0c;可以提升IT资源管理效率、保障城市运营安全稳定、实现数据可视化与智能分析、优化资源配置与决策支持、促进智慧城市可持续发展。 在智慧城市中&#xff0c;运维管理软件的应用场景非常广泛。以下是其中几个具体应用场景…

Linux 网络配置

Linux 网络配置 #学习目标 1&#xff0c;掌握Linux中网络配置相关的文件。 2&#xff0c;掌握Linux中网络配置的相关参数。 3&#xff0c;掌握常用的网络配置命令。 4&#xff0c;管理Linux的常用网络服务。Linux系统下配置网络有两种方式&#xff1a; 在安装Linux系统的过程…

高并发架构设计方法:面对高并发,怎么对症下药?

Java全能学习面试指南&#xff1a;https://javaxiaobear.cn 我们知道&#xff0c;“高并发”是现在系统架构设计的核心关键词。一个架构师如果设计、开发的系统不支持高并发&#xff0c;那简直不好意思跟同行讨论。但事实上&#xff0c;在架构设计领域&#xff0c;高并发的历史…

DAPP开发【01】知识简介

系列文章目录 系列文章在DAPP开发专栏 文章目录 系列文章目录前言一、公/私钥是什么&#xff1f;二、区块浏览器三、用户和区块链交互1.infura 四、opensea 前言 DAPP&#xff0c;全称为Decentralized Application&#xff0c;即去中心化应用程序。它是一种基于区块链技术构建…

【C++】程序题( STL标准模板库)

&#x1f383;个人专栏&#xff1a; &#x1f42c; 算法设计与分析&#xff1a;算法设计与分析_IT闫的博客-CSDN博客 &#x1f433;Java基础&#xff1a;Java基础_IT闫的博客-CSDN博客 &#x1f40b;c语言&#xff1a;c语言_IT闫的博客-CSDN博客 &#x1f41f;MySQL&#xff1a…

【element-plus使用】el-select自定义样式、下拉框选项过长等问题解决

1、自定义样式 <template><el-select v-model"value" style"width: 150px"><el-option label"选项一" value"option1"></el-option><el-option label"选项二" value"option2"><…

115. 不同的子序列

给你两个字符串 s 和 t &#xff0c;统计并返回在 s 的 子序列 中 t 出现的个数&#xff0c;结果需要对 109 7 取模。 示例 1&#xff1a; 输入&#xff1a;s "rabbbit", t "rabbit" 输出&#xff1a;3 解释&#xff1a; 如下所示, 有 3 种可以从 s 中…

UG\NX二次开发 设置对象上属性的锁定状态UF_ATTR_set_user_attribute_lock_with_title_and_type

文章作者:里海 来源网站:里海NX二次开发3000例专栏 简介 设置对象上属性的锁定状态UF_ATTR_set_user_attribute_lock_with_title_and_type,用于代替旧版函数UF_ATTR_set_locked,使用旧版函数UF_ATTR_set_locked锁定属性请参照这篇文章《UG\NX二次开发 设置对象上属性的锁定…

PyMuPDF---Python处理PDF的宝藏库详解

1、PyMuPDF简介 1.1 介绍 在介绍PyMuPDF之前&#xff0c;先来了解一下MuPDF&#xff0c;从命名形式中就可以看出&#xff0c;PyMuPDF是MuPDF的Python接口形式。 MuPDF MuPDF 是一个轻量级的 PDF、XPS和电子书查看器。MuPDF 由软件库、命令行工具和各种平台的查看器组成。 …

【网络奇缘】- 计算机网络|分层结构|深入学习ISO模型

&#x1f308;个人主页: Aileen_0v0&#x1f525;系列专栏: 一见倾心,再见倾城 --- 计算机网络~&#x1f4ab;个人格言:"没有罗马,那就自己创造罗马~" 回顾链接&#xff1a;http://t.csdnimg.cn/nRRzR 这篇文章是关于深入学习OSI模型七层结构&#xff0c; “书山…

【精选】Spring框架介绍及Spirng各个版本的特性

Spring框架介绍 Spring框架英文全称Spring Framework&#xff0c;是由Spring团队研发的模块化、轻量级开源框架。其主要目的是为了简化项目开发。在项目开发中&#xff0c;可以说没有刻意使用Spring&#xff0c;却处处有着Spring存在。用官网对Spring框架的介绍&#xff1a;Sp…

Spring-事务支持

目录 一、事务概述 二、引入事务场景 三、Spring对事务的支持 Spring实现事务的两种方式 声明式事务之注解实现方式 1.在Spring配置文件中配置事务管理器 2. 在Spring配置文件引入tx命名空间 3. 在Spring配置文件中配置“事务注解驱动器”&#xff0c;通过注解的方式控…

【算法】算法题-20231130

这里写目录标题 一、290. 单词规律二.、存在重复元素 II三、128. 最长连续序列 一、290. 单词规律 简单 给定一种规律 pattern 和一个字符串 s &#xff0c;判断 s 是否遵循相同的规律。 这里的 遵循 指完全匹配&#xff0c;例如&#xff0c; pattern 里的每个字母和字符串 s…