一、基础算法9:区间合并 模板题+算法模板(区间合并)

news2025/2/27 1:47:28

文章目录

  • 算法模板
    • 离散化题目模板
  • 模板题
    • 区间和
      • 原题链接
      • 题目
      • 题解
      • 思路

算法模板

离散化题目模板

// 将所有存在交集的区间合并
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;
}

模板题

区间和

原题链接

https://www.acwing.com/problem/content/805/

题目

803 . 区间合并
给定 n
个区间 [li,ri]
,要求合并所有有交集的区间。

注意如果在端点处相交,也算有交集。

输出合并完成后的区间个数。

例如:[1,3]
和 [2,6]
可以合并为一个区间 [1,6]

输入格式
第一行包含整数 n

接下来 n
行,每行包含两个整数 l
和 r

输出格式
共一行,包含一个整数,表示合并区间完成后的区间个数。

数据范围
1≤n≤100000
,
−109≤li≤ri≤109
输入样例:

5
1 2
2 4
5 6
7 8
7 9

输出样例:

3

题解

#include <iostream>
#include <vector> 
#include <algorithm>
using namespace std;

const int N = 1e5 + 10;

typedef pair<int,int> PII;

vector<PII> segs;

int n,l,r;

vector<PII> merge(vector<PII> segs){
	vector<PII> res;
	sort(segs.begin(),segs.end());
	
	int st = -2e9, ed = -2e9;
	
	for(auto seg : segs){
		if(seg.first>ed){
			if (st != -2e9) res.push_back({st,ed});
			st = seg.first;
			ed = seg.second;
		}
		else{
//			ed = max(ed,seg.second);
			if(seg.second > ed){
				ed = seg.second;
			}
		}
	}
	if(st != -2e9) res.push_back({st,ed}); // 注意最后还要把最后一轮合并好的st,ed加进结果数组 
	
	return res; 
}
int main(){
	cin>>n;
	
	for(int i=0;i<n;i++){
		cin>>l>>r;
		segs.push_back({l,r});
	}
	
	vector<PII> res = merge(segs);

	cout<< res.size() <<endl;
	
	return 0; 
}

思路

请添加图片描述
按区间左端点排序,从左开始遍历
有三种情况:设当前区间左右端点为(st,ed)
① 新的区间st<st1<ed,ed1<ed,即在当前区间内,此时不用更新;
②新的区间st<st2<ed,ed2>ed,此时需要更新右端点,即ed = ed2;
③新的区间st3>ed,此时需要维护一个新的区间,将前面合并好的(st,ed)区间加入到结果vector中,然后st = st3,ed = ed3,维护该区间向后进行遍历;

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

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

相关文章

SD-MTSP:遗传算法GA求解单仓库多旅行商问题(提供MATLAB代码,可以修改旅行商个数及起点)

一、单仓库多旅行商问题 多旅行商问题&#xff08;Multiple Traveling Salesman Problem, MTSP&#xff09;是著名的旅行商问题&#xff08;Traveling Salesman Problem, TSP&#xff09;的延伸&#xff0c;多旅行商问题定义为&#xff1a;给定一个&#x1d45b;座城市的城市集…

SpringSecurity和Shiro---权限设置

在 Web 开发中&#xff0c;安全一直是非常重要的一个方面。安全虽然属于应用的非功能性需求&#xff0c;但是应该在应用开发的初期就考虑进来。如果在应用开发的后期才考虑安全的问题&#xff0c;就可能陷入一个两难的境地&#xff1a;一方面&#xff0c;应用存在严重的安全漏洞…

15-JavaScript-内部JS、外部JS、数据类型、关键词

1、内部JS&#xff1a;是在HTML文件中直接嵌入JavaScript代码的一种方式。使用<script>标签来定义JavaScript代码块。通常情况下&#xff0c;我们会将JavaScript代码放在文档的<head>或<body>标签内。 <!DOCTYPE html> <html> <head><…

MySQL-----事务管理

文章目录 前言一、什么是事务二、为什么会出现事务三、事物的版本支持四、事物的提交方式五、事务常见的操作方式六、事务隔离级别如何理解隔离性1隔离级别查看与设置隔离性读未提交【Read Uncommitted】读提交【Read Committed】可重复读【Repeatable Read】串行化【serializa…

ChatGPT 联网和插件功能,下周起可直接使用,无需排队!

夕小瑶科技说 分享 来源 | 新智元 OpenAI和谷歌&#xff0c;已经打得急红了眼&#xff0c;ChatGPT Plus用户&#xff0c;下周就可以体验联网和插件功能&#xff0c;无需再排队。鲨疯了&#xff0c;真的鲨疯了&#xff01; ChatGPT&#xff0c;下周开始联网&#xff0c;并开放插…

DAY 57 MySQL数据库的事务

事务的概念 事务是一种机制、一个操作序列&#xff0c;包含了一组数据库操作命令&#xff0c;并且把所有的命令作为一个 整体一起向系统提交或撤销操作请求&#xff0c;即这一组数据库命令要么都执行&#xff0c;要么都不执行。事务是一个不可分割的工作逻辑单元&#xff0c;在…

Python突破JS加密限制,进行逆向解密

前言 嗨喽~大家好呀&#xff0c;这里是魔王呐 ❤ ~! 目录标题 前言开发环境:模块使用:逆向目标逆向过程参数 JS 加密关键代码Python 登录关键代码尾语 &#x1f49d; 开发环境: Python 3.8 Pycharm 模块使用: time >>> 时间模块&#xff0c;属于内置&#xff0c;无…

lol由于找不到vcruntine140_1.dll文件,vcruntime140_1.dll修复方法

家人们有没有遇到过打开游戏或者软件提示由于找不到vcruntime140_1.dll&#xff0c;无法继续执行此代码的情况&#xff0c;是不是不知道怎么修复呢&#xff1f;Vcruntime140_1.dll是一个Windows系统文件&#xff0c;它是Microsoft Visual C Redistributable for Visual Studio …

快速搭建测ceph

一、cephadm介绍 Cephadm是一个由Ceph社区维护的工具&#xff0c;它用于在Ceph集群中管理和部署Ceph服务。它是一个基于容器化的工具&#xff0c;使用了容器技术来部署Ceph集群的不同组件。 使用Cephadm&#xff0c;管理员可以通过简单的命令行界面在整个Ceph集群中进行自动化…

Python递归树结构,回溯法深度优先、广度优先详解,代码实现

Python实现&#xff0c;递归算法&#xff0c;深度优先、广度优先 其实递归说白了就是循环本身函数&#xff0c;只不过下次循环的输入值是上次循环的结果值。关于递归算法&#xff0c;我经常把它用在搜索、计算中。我们来看一个简单的例子&#xff1a; 计算Demo 要实现1&…

高数杂项1

一些口诀 长杠变短杠&#xff0c;开口换方向 其实意思是底下这个 C ∩ D ‾ C ‾ ∪ D ‾ \overline{C \cap D} \overline C \cup \overline D C∩DC∪D 可导必可微&#xff0c;可微必可导 二者互为充要条件 可导必定连续&#xff0c;连续未必可导。连续必定可积,可微未必可积…

django-restful-framework基础知识

DRF 总体设计框架流程 DRF大体的工作流程如下图&#xff1a; 其中&#xff1a;这里的Request不再是Django默认的HttpRequest对象&#xff0c;而是REST Framework提供的扩展了HttpRequest类的Request类对象。 1. Web应用模式 在开发Web应用中&#xff0c;有两种应用模式&…

【sentinel】授权规则详解及源码分析

之前我们在配置流控规则时&#xff0c;可以根据origin参数来对调用方进行限流。 很多时候&#xff0c;我们需要根据调用方来限制资源是否通过&#xff0c;这时候可以使用Sentinel的黑白名单控制的功能&#xff0c;这就是授权规则。 黑白名单也是根据资源的请求来源&#xff0…

vite跨域问题,你可能需要看这篇文章

最近在学习项目的时候&#xff0c;使用了vite工具进行构建&#xff0c;然后出现了跨域的问题&#xff0c;中间的曲折不过多叙述&#xff0c;直接进入正题。 前端成功启动后的界面&#xff1a; 然后在后端进行的Controller上使用了如下的配置 然后浏览器就会出现跨域的问题 为什…

Maven 依赖管理 学习

目录 Maven 依赖管理 可传递性依赖发现 依赖范围 依赖管理 Maven 自动化部署 问题描述 解决方案 修改项目的 pom.xml Maven Release 插件 Maven Web 应用 创建 Web 应用 构建 Web 应用 部署 Web 应用 Maven 依赖管理 Maven 一个核心的特性就是依赖管理。当我们处…

【场景生成与研究】考虑时序相关性MC的场景生成与削减研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

Docker基础篇(下)

1、容器命令 新建启动容器 docker run [OPTIONS] IMAGE [COMMAND] [ARG...]常用的参数&#xff1a; ● --name&#xff1a;为容器指定一个名称 ● -d&#xff1a;后台运行容器并返回容器ID&#xff0c;也即启动守护式容器 ● -i&#xff1a;以交互模式&#xff08;interacti…

基于FPGA:运动目标检测(LCD显示+串口输出,纯Verilog工程)

目录 前言一、先看效果二、硬件选择三、系统框架四、程序模块1、系统顶层模块2、图像处理顶层模块3、LCD驱动顶层模块4、SDRAM控制器顶层模块5、上位机发送模块 五、工程及套件获取1、工程获取2、套件 前言 最早做了基于FPGA&#xff1a;运动目标检测&#xff08;VGA显示&#…

Java基础-面向对象总结(1)

本文主要梳理关于 Java面向对象的基础知识,希望对你有帮助 Java对象 目录 Java对象 Java创建对象有几种方式 创建一个对象用什么运算符? 对象实体与对象引用有何不同? 创建一个对象的步骤 Java对象都包含什么 ? new Object()对象占多少个字节? 对象的比较 对象的相…

kafka原理之生产者

batch.size:只有数据累计到batch.size后&#xff0c;sender才会发送数据。默认16k linger.ms:如果迟迟没有达到batch.size&#xff0c;sender等待linger.ms设置时间之后&#xff0c;发送数据。单位:ms,默认0(没有延迟) acks设置: 0:不需要等待数据落盘应答&#xff1b;1:leader…