基础算法---区间合并

news2024/9/22 19:43:58

直接上题目,不废话! 

题目

给定 n 个区间 [l,r],要求合并所有有交集的区间。

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

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

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

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

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

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

数据范围

1≤n≤100000,
−10e9≤l≤r≤10e9
输入样例:

5
1 2
2 4
5 6
7 8
7 9


输出样例:

3

思路 

对于这n个区间,我们可以先用vector数组存放,然后再对左端点进行排序, 排完序后,后一个区间的左端点就一定大于等于前一个区间的左端点了,如图,蓝色是一个维护的区间,st和ed分别是维护区间的左右端点

相邻的两个区间只有这三种情况,绿色和红色可以归为一种,就是它的左端点小于等于蓝色的右端点,那我们的维护区间的右端点就要取(蓝色的右端点,对比区间的右端点)的最大值,当出现橙色这种情况就说明蓝色区间已经是一个答案区间了

代码 

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

typedef pair <int,int> PII;
vector <PII> segs; //输入的初始区间数组

int n;

void merge(vector <PII> &segs)
{
	vector <PII> res; // 定义的答案区间数组

	sort(segs.begin(), segs.end()); //按左端点的大小排序

	int st = -2e9, ed = -2e9; //分别是维护区间的左右端点,取一个很小值,确保小于所有的有效值

    /*for (auto item:vec)不改变迭代对象的值,效果是利用item遍历并获得vec容器中的每一个值*/
	for (auto seg : segs)
	{
		if (ed < seg.first) //维护区间的右端点和对比区间的左端点不相交就是已经是合并好了一个答案区间
		{
			if (ed != -2e9) //两个if(ed!=-2e9)是确保初始值不被加入到答案数组
			{
				res.push_back({ st,ed });
			}
			st = seg.first, ed = seg.second; //更新维护区间
		}
		else
		{
			ed = max(ed, seg.second);
		}
	}

	if(ed!=-2e9) //如果区间不为空,那么最后一个区间一定是一个独立的答案区间
		res.push_back({ st,ed });

	segs = res; 
}
int main()
{
	cin >> n;
	while (n--)
	{
		int l, r;
		cin >> l >> r;
		segs.push_back({ l,r });
	}

	merge(segs);

	cout << segs.size() << endl;

	return 0;
}

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

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

相关文章

Linux中如何执行命令

命令格式&#xff1a; 主命令 [选项...] [参数&#xff08;要操作的对象&#xff09;...] ——选项&#xff1a;决定了命令的执行方式 长选项 --version 短选项 -V&#xff0c;-i&#xff0c;-d &#xff0c;-r ——参数&#xff1a;决定命令的作用对象 不同的命令参数不同 …

天府新区直播产业成型,成都直播产业基地开园倒计时!

直播&#xff0c;正逐渐衍化为当今社会的基础媒介&#xff0c;直播行业以“平台经济”为依托&#xff0c;构筑了数字经济一大“动脉”。 天府新区&#xff0c;数字激潮涌。蜂巢产业&#xff0c;让未来生长。 站在电商直播的时代风口上&#xff0c;树莓集团携手上市公司德商产投…

如何高效且优雅地使用Redis

本文从如下7个维度&#xff0c;带你全面理解Redis的最佳实践和优化&#xff1a; 内存性能可靠性运维安全资源规划监控 1、如何节省内存 1.1、控制Key的长度 在开发业务时&#xff0c;要提前预估Redis中写入key的数量&#xff0c;如果key数量达到了百万级别&#xff0c;那过…

【SpringMVC】之自定义注解

文章目录 一、Java注解1.1 简介1.2 分类1.2.1 JDK基本注解1.2.2 JDK元注解1.3 自定义注解 二、使用自定义注解2.1 **案例一&#xff08;获取类与方法上的注解值&#xff09;**2.2 **案例二&#xff08;获取类属性上的注解属性值&#xff09;**2.3 **案例三&#xff08;获取参数…

easycms v5.5 分析 | Bugku S3 AWD排位赛

前言 这个awd打的悲&#xff0c;后台默认用户名密码为admin:admin&#xff0c;但是几乎所有人都改了 而且一进去看到这个cms就有点懵逼&#xff0c;都不知道这个cms是干嘛的&#xff08;没用过相似的cms&#xff09; 虽然网上找出了很多相关的漏洞&#xff0c;但是不知道为什…

API实战教程:使用身份证OCR识别API构建一个应用

1. 引言 你是否曾经想过&#xff0c;只需拍一张身份证的照片&#xff0c;就能自动读取上面的所有信息&#xff1f;今天&#xff0c;我们要介绍的就是这样一个神奇的工具&#xff1a;身份证OCR识别API。不管你是技术小白还是初学者&#xff0c;跟着我们的步骤&#xff0c;你都可…

揭秘弹幕游戏制作

最近好多人问弹幕游戏&#xff0c;甚至是招人的也要DOTS做弹幕游戏... 实际上目前的弹幕游戏绝大多数应该和DOTS没有半点关系&#xff0c;别忘了DOTS这项技术渲染问题还没能够被合理解决呢 所以目前用的全都是GPU Instance这项技术&#xff0c;于是乎我决定下场写这篇帖子&am…

【藏经阁一起读】(69)__《阿里云视频云产品手册2023版》

【藏经阁一起读】&#xff08;69&#xff09;__《阿里云视频云产品手册2023版》 目录 一、概述阿里云视频云全产品矩阵 二、数字人视频制作 以下是人工智能虚拟人物的一些优秀代表作品及其特点&#xff1a; 阿里云视频云数字人视频制作产品优势 ▶高还原度的拟真效果 ▶场…

网络安全(黑客技术)自学规划

一、什么是网络安全 网络安全可以基于攻击和防御视角来分类&#xff0c;我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术&#xff0c;而“蓝队”、“安全运营”、“安全运维”则研究防御技术。 无论网络、Web、移动、桌面、云等哪个领域&#xff0c;都有攻与防两面性…

外包干了2个月,技术退步明显.......

先说一下自己的情况&#xff0c;大专生&#xff0c;18年通过校招进入武汉某软件公司&#xff0c;干了接近4年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试…

华为云云耀云服务器L实例评测|华为云云耀云服务器L实例开展性能评测

作者简介&#xff1a; 辭七七&#xff0c;目前大二&#xff0c;正在学习C/C&#xff0c;Java&#xff0c;Python等 作者主页&#xff1a; 七七的个人主页 文章收录专栏&#xff1a; 七七的闲谈 欢迎大家点赞 &#x1f44d; 收藏 ⭐ 加关注哦&#xff01;&#x1f496;&#x1f…

哪个牌子的电视盒子好用?锋哥数码揭晓最新电视盒子品牌排行榜

哪个牌子的电视盒子好用&#xff1f;不同人群需求不同选购侧重点也不同&#xff0c;老人要买操作简单的&#xff0c;小孩要买辅导课多的&#xff0c;追剧党要买看视频流畅广告少的&#xff0c;喜欢投屏的就更注重投屏体验&#xff0c;锋哥做电视盒子的测评已经很多年了&#xf…

SQL 2008 R2 和vCenter 5.1安装步骤与AQ

准备情况&#xff1a; Windows 2008 r2 sp1 64bit操作系统 Sql 2008 完整版安装包&#xff08;名称&#xff1a;SQLFULL_CHS.iso 安装完成会安装managment&#xff09; vCenter完整版安装包&#xff08;名称&#xff1a;VMware-VIMSetupall-5.1.0-799735.iso&#xff09; …

亿级长连接,淘宝接入层网关的架构设计

说在前面 在40岁老架构师 尼恩的读者交流群(50)中&#xff0c;很多小伙伴拿到一线互联网企业如阿里、网易、有赞、希音、百度、滴滴的面试资格。 最近&#xff0c;尼恩指导一个小伙伴简历&#xff0c;写了一个《高并发网关项目》&#xff0c;此项目帮这个小伙拿到 字节/阿里/…

C++——vector(2)

作者&#xff1a;几冬雪来 时间&#xff1a;2023年9月15日 内容&#xff1a;C——vector知识讲解 目录 前言&#xff1a; vector: 构造函数&#xff1a; 创建模板&#xff1a; reserve/push_back: 迭代器/capacity和size&#xff1a; insert&#xff1a; 改进&…

基于springboot+vue的大学生智能消费记账系统

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容&#xff1a;毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目介绍…

OPTEE异常调用栈解析

安全之安全(security)博客目录导读 目录 一、OPTEE标准的异常调用栈格式 二、OPTEE异常调用栈解析脚本 三、如何执行解析命令 四、OPTEE异常调用栈解析结果 序言&#xff1a;当OPTEE发生异常时&#xff0c;安全控制台会输出dump信息&#xff0c;虽然有了Call stack&#x…

企业级SpringBoot单体项目模板 —— 基础应用搭建

&#x1f61c;作 者&#xff1a;是江迪呀✒️本文关键词&#xff1a;SpringBoot项目模板、工程、MyBatis-plus☀️每日 一言&#xff1a;你那么在意不喜欢你的人的言语&#xff0c;这对喜欢你的人来说很不公平 一、创建一个Maven项目 Maven的安装自己百度。 2.1 …

新能源汽车驱动电机的基本知识

学习目标:了解电机的基本知识。能力目标:培养学生搜集和整理相关资料的能力。素质目标:培养学生良好的职业素养。额定电店.在夫见定条件下电池工作的*于佳 电压知识准备术语和定义。 (1)驱动电机系统 通过有效的控制策略将动力蓄电池提供的直流电转化为交流实现电机的正转以及反…