每日一练:合并区间

devtools/2024/9/20 4:03:23/ 标签: 算法

一、题目要求

以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间 。

示例 1:

输入:intervals = [[1,3],[2,6],[8,10],[15,18]]
输出:[[1,6],[8,10],[15,18]]
解释:区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].

示例 2:

输入:intervals = [[1,4],[4,5]]
输出:[[1,5]]
解释:区间 [1,4] 和 [4,5] 可被视为重叠区间。

提示:

  • 1 <= intervals.length <= 104
  • intervals[i].length == 2
  • 0 <= starti <= endi <= 104

二、解法1-排序 O(Nlogn) 执行时间长,内存消耗高

先按照每个区间的第一个数字给 intervals排序,顺序是由小到大,需要自己写一个比较器

然后将第一个区间放到一个暂存器 _ret 中。

如果intervals只有一个区间,无需处理,直接返回即可。

如果下一个区间的左小于等于 _ret中的区间的右,两个区间就可以合并,新区间的左不变,右取最大值。

如果下一个区间的左大于 _ret中的区间的右,说明两个区间不重叠,不能合并,将 _ret中的区间放入答案中,然后 _ret赋值为该区间进行下一次合并。

如果_ret已经与最后一个区间进行判断了,无论如何,_ret中的都是最后一个区间了(_ret的右都是最大的了),直接把_ret放入答案中。

class Solution {
public:vector<vector<int>> merge(vector<vector<int>>& intervals) {if(intervals.size()==1)return intervals;sort(intervals.begin(),intervals.end());vector<vector<int>> ret;vector<int> _ret = intervals[0];int falt = 0;for (int i = 0; i < intervals.size() - 1; i++) {if (_ret[1] >= intervals[i + 1][0]) // 合并区间{_ret[1] = max(intervals[i + 1][1],_ret[1]);} else {ret.emplace_back(_ret);_ret = intervals[i + 1];}if (i + 1 == intervals.size() - 1) {ret.emplace_back(_ret);break;}}return ret;}
};

三、解法2-思路优化版

解法2是解法1的思路优化版,执行时间几乎没有改变,但是内存消耗一般,而且更加通俗易懂:

首先,两个区间的相互关系有三种情况:

         可以发现,只要是上两种情况,就一定有:R>= l && L <= r。(两种情况取交集)

        只有满足 R>= l && L <= r 的两个区间才重合,才需要合并,所以遍历数组,只要满足上式,就合并区间,左边界取最小值,右边界取最大值

class Solution {
public:vector<vector<int>> merge(vector<vector<int>>& intervals) {sort(intervals.begin(), intervals.end()); // 先排序vector<vector<int>> ret{intervals[0]};for (const auto& LR : intervals) {int i = 0;for (; i < ret.size(); i++) {if (LR[1] >= ret[i][0] && LR[0] <= ret[i][1]) {ret[i][0] = min(ret[i][0], LR[0]);ret[i][1] = max(ret[i][1], LR[1]);break;}}if (i == ret.size()) // 没有可以合并的区间ret.emplace_back(LR);}return ret;}
};

 


http://www.ppmy.cn/devtools/109034.html

相关文章

BLIP3技术小结(xGen-MM (BLIP-3): A Family of Open Large Multimodal Models)

paperhttps://www.arxiv.org/abs/2408.08872githubhttps://github.com/salesforce/LAVIS/tree/xgen-mmOrg.Salesforce AI Research个人博客地址http://myhz0606.com/article/blip3 前置阅读&#xff1a;BLIP系列总结 核心思路 虽然过去BLIP系列对LMM发展起到至关重要的作用&…

@Value读取properties中文乱码解决方案

前几天碰到使用Value中文乱码的问题&#xff0c;英文字符则不会出现问题 原因&#xff1a;SpringBoot在加载properties配置文件时&#xff0c;使用的默认编码是&#xff1a;ISO_88599_1 解决方式&#xff1a;将properties改成yml就可以读取成功了 Data Component PropertySou…

R 包管理

R 包管理 函数总结简介安装包选择安装路径 更新包devtoolsGitHub 和 BioConductor加载包迁移扩展包 2024-09-04 函数总结 函数功能install.packages()安装包。不加参数&#xff0c;显示CRAN镜像站点站点&#xff0c;加包名称&#xff0c;直接下载安装包installed.packages()列…

EmguCV学习笔记 VB.Net 第10章 人脸识别

版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请在显著位置标明本文出处以及作者网名&#xff0c;未经作者允许不得用于商业目的。 EmguCV是一个基于OpenCV的开源免费的跨平台计算机视觉库,它向C#和VB.NET开发者提供了OpenCV库的大部分功能。 教程VB.net版本请访问…

仿华为车机UI--图标从Workspace拖动到Hotseat同时保留图标在原来位置

基于Android13 Launcher3,原生系统如果把图标从Workspace拖动到Hotseat里则Workspace就没有了&#xff0c;需求是执行拖拽动作后&#xff0c;图标同时保留在原位置。 实现效果如下&#xff1a; 实现思路&#xff1a; 1.如果在workspace中拖动&#xff0c;则保留原来“改变图标…

项目日志——日志等级类和日志消息类的设计、实现、测试

文章目录 日志等级类设计实现测试 日志消息类设计实现 日志等级类 设计 日志等级一共分7个等级 UNKNOW 0OFF 关闭所有日志输出DEBUG 调试等级INFO 提示等级WARN 警告等级ERROR 错误等级FATAL 致命等级OFF 关闭所有日志的输出 每一个项目都会设置一个默认输出等级&#xff…

前端项目开发之prettier安装和使用

前端项目开发之安装prettier和使用 Prettier 是一个流行的代码格式化工具&#xff0c;可以帮助你保持代码风格的一致性。以下是如何在 Visual Studio Code (VS Code) 中安装和使用 Prettier 的步骤&#xff1a; 安装 Prettier 通过 VS Code 扩展市场安装&#xff1a; 打开 V…

使用AI赋能进行软件测试-文心一言

1.AI赋能的作用 提高速度和效率缺陷预测与分析 2.AI互动指令格式--文心一言 角色、指示、上下文例子、输入、输出 a 直接问AI 针对以下需求&#xff0c;设计测试用例。 需求&#xff1a; 1、账号密码登录系统验证账号和密码的正确性。 验证通过,用户登录成功,进入个人中心;验…

pytorch tensor.expand函数介绍

在 PyTorch 中&#xff0c;tensor.expand()是一个用于扩展张量维度的函数。 一、函数作用 它允许你在不复制数据的情况下&#xff0c;将张量的形状扩展到指定的维度大小。这对于需要在特定维度上重复数据的操作非常有用&#xff0c;例如在进行广播操作时调整张量的形状。 二…

Web3社交新经济,与 SOEX 实现无缝交易的高级安全性

出于充分的理由&#xff0c;安全性是交易中至关重要的考虑因素。每个人都应该确保自己的资金在交易时是安全的。由于 &#xff33;&#xff2f;&#xff25;&#xff38; 充当您与交易所的最佳连接&#xff0c;因此必须强调的是&#xff0c;该系统不会引发任何安全问题。 &a…

com.baomidou.mybatisplus.annotation.DbType 无法引入

com.baomidou.mybatisplus.annotation.DbType 无法引入爆红 解决 解决 ❤️ 3.4.1 是mybatis-plus版本&#xff0c;根据实际的配置→版本一致 <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-annotation</artifactId>&…

[动态规划] 删除并获得点数

给你一个整数数组 nums &#xff0c;你可以对它进行一些操作。 每次操作中&#xff0c;选择任意一个 nums[i] &#xff0c;删除它并获得 nums[i] 的点数。之后&#xff0c;你必须删除 所有 等于 nums[i] - 1 和 nums[i] 1 的元素。 开始你拥有 0 个点数。返回你能通过这些操…

国内短剧系统怎么搭建以及都需要那些资质?

聊到国内短剧&#xff0c;相信大家都不陌生&#xff0c;在各大短视频平台可谓是火的一批&#xff0c;您或许有想加入进来的想法&#xff0c;或是已经有规划还未实现的&#xff0c;请停下脚步&#xff0c;耐心看完该文章&#xff0c;相信一定会对你有所帮助的。本文介绍短剧平台…

做饭时用什么样的白酒能更好衬托食物的鲜味?

在做饭的时候&#xff0c;白酒扮演着举足轻重的角色&#xff0c;其核心功能在于祛除食材不良风味并显著提升菜肴的香醇层次。挑选适宜的白酒时&#xff0c;需细致考量其种类与酒精浓度&#xff0c;尽量与食材的风味和谐共生&#xff0c;而非相互抵触。以下是酱酒亮哥yutengtrad…

LeetCode HOT100系列题解之最大正方形(6/100)

题目&#xff1a;最大正方形. - 力扣&#xff08;LeetCode&#xff09; 题解&#xff1a; 第一种方法&#xff1a;前缀和二分答案&#xff08;暴力优化&#xff09;我感觉比官方给的暴力好一点 时间复杂度&#xff1a; 暴力优化1&#xff1a;通过前缀和减少判断1出现得次数…

SpringBoot教程(十五) | SpringBoot集成RabbitMq(消息丢失、消息重复、消息顺序、消息顺序)

SpringBoot教程&#xff08;十五&#xff09; | SpringBoot集成RabbitMq&#xff08;消息丢失、消息重复、消息顺序、消息顺序&#xff09; RabbitMQ常见问题解决方案问题一&#xff1a;消息丢失的解决方案&#xff08;1&#xff09;生成者丢失消息丢失的情景解决方案1&#xf…

Elasticsearch之原理详解

简介 ES是使用 Java 编写的一种开源搜索引擎&#xff0c;它在内部使用 Lucene 做索引与搜索&#xff0c;通过对 Lucene 的封装&#xff0c;隐藏了 Lucene 的复杂性&#xff0c;取而代之的提供一套简单一致的 RESTful API 然而&#xff0c;Elasticsearch 不仅仅是 Lucene&#…

【ES备份和还原索引数据】

文章目录 备份&#xff08;Snapshot&#xff09;还原&#xff08;Restore&#xff09;注意事项示例 在 Elasticsearch 中&#xff0c;备份和还原索引数据通常通过快照&#xff08;Snapshot&#xff09;和恢复&#xff08;Restore&#xff09;机制来实现。以下是详细的操作步骤&…

【RabbitMQ】核心概念

界⾯上的导航栏共分6部分, 这6部分分别是什么意思呢, 我们先看看RabbitMQ的工作流程 1. Producer和Consumer Producer:生产者,是RabbitMQ Server的客户端,向RabbitMQ发送消息 Consumer: 消费者,也是RabbitMQ Server的客户端,从RabbitMQ接收消息 Broker:其实就是RabbitMQSer…

策略规划:在MySQL中实现数据恢复的全面指南

数据恢复是数据库管理中至关重要的一环&#xff0c;它确保在发生数据丢失或损坏的情况下&#xff0c;能够迅速且准确地恢复数据。在MySQL中&#xff0c;实现有效的数据恢复策略规划需要综合考虑备份策略、备份类型、存储管理、故障转移机制以及恢复流程。本文将深入探讨如何在M…