数据结构--合并区间

数据结构–合并区间

分析

首先需要对整个二维数组的每一个区间的第一列(左端)进行升序,然后因为合并之后的的区间个数不确定,所以使用ArrayList,然后创建一个临时变量为第一个区间,然后比较其第二列(右端)是否与下一个区间的左端相交(注意,这里是大于等于),如果相交,就比较他们右端点的大小,把大的赋给临时变量,如果不相交,就往集合添加这个区间,然后让临时变量为当前没有相交到的数组

代码实例

第一个:(我最开始的土方法,看看就行)

class Solution {public int[][] merge(int[][] intervals) {if(intervals.length == 0){return intervals;}for(int j = 0 ;j < intervals.length - 1;j++){for(int i = 0;i < intervals.length - 1 - j;i++){int [] temp = new int[2]; if(intervals[i][0] > intervals[i + 1][0]) {temp = intervals[i];intervals[i] = intervals[i + 1];intervals[i + 1] = temp;}}}// 完成排序List<int []> list = new ArrayList<>();int [] temp = intervals[0];for(int i = 1; i < intervals.length;i++){if(temp[1] >= intervals[i][0]){temp[1] =Math.max(temp[1],intervals[i][1]);}else{list.add(temp);temp = intervals[i];}}list.add(temp);return list.toArray(new int[list.size()][2]);}
}

标准的:

class Solution {public int[][] merge(int[][] intervals) {
if (intervals.length == 0) return intervals;//1、对二维数组按照第一列升序排序Arrays.sort(intervals, (a, b) -> a[0] - b[0]);//2、进行合并数组List<int []> list = new ArrayList<>();int term[] =intervals[0];//临时空间,1 判断是否需要合并集合,2 是否放入结果集for (int i = 1; i < intervals.length; i++) {if (term[1]>=intervals[i][0]){term[1]=Math.max(term[1],intervals[i][1]);}else {list.add(term);term=intervals[i];}}list.add(term);return list.toArray(new int[list.size()][2]);}
}

力扣的示例代码:

class Solution {public int[][] merge(int[][] intervals) {int max = Integer.MIN_VALUE;int min = Integer.MAX_VALUE;for (int[] ints : intervals) {max = Math.max(ints[1],max);min = Math.min(ints[0],min);}// min + index = ints[0]// map数组存储的是 每个区间的起点 对应的最大的终点int[] map = new int[max - min + 1];Arrays.fill(map, -1);// 区间起始值相同,则取最大右区间for (int[] ints : intervals) {int left = ints[0] - min;map[left] = Math.max(map[left], ints[1]);}//开始正常处理LinkedList<int []> res = new LinkedList<>();for (int i = 0; i < map.length; i++) {if (map[i] == -1) {continue;}int left = i + min;int right= map[i];if (res.size() == 0 || left > res.getLast()[1]) {//当前区间的起始点,大于上一个区间的终止点,需要开辟一个新的区间res.add(new int[]{left,right});}else{if (res.getLast()[1] < right) {//当前区间的终止点 大于 上一个区间的终止点,则要更新区间的终止点res.getLast()[1]  = right;}}}return res.toArray(new int[][]{});}
}

复杂度分析

时间复杂度:

O(nlogn),其中 n 为区间的数量。除去排序的开销,我们只需要一次线性扫描,所以主要的时间开销是排序的 O(nlogn)。

空间复杂度:

O(logn),其中
n 为区间的数量。这里计算的是存储答案之外,使用的额外空间。
O(logn) 即为排序所需要的空间复杂度。

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

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

相关文章

Artplayer视频JSON解析播放器源码|支持弹幕|json数据模式

全开源Artplayer播放器视频解析源码&#xff0c;支持两种返回模式&#xff1a;网页播放模式、json数据模式&#xff0c;json数据模式支持限制ip每分钟访问次数UA限制key密钥&#xff0c;也可理解为防盗链 &#xff0c;本播放器带弹幕库。 运行环境 推荐使用PHP8.0 redis扩展…

2024世界技能大赛某省选拔赛“网络安全项目”B模块--应急响应解析

广东省第三届职业技能大赛“网络安全项目”B模块任务书 PS: 关注鱼影安全第一部分 网络安全事件响应任务 1:应急响应第二部分 数字取证调查第三部分 应用程序安全:需要环境可以私信博主~PS: 关注鱼影安全 模块 B 竞赛项目试题 本文件为:2024世界技能大赛某省选拔赛-模块 B …

您的计算机已被.360勒索病毒感染?恢复您的数据的方法在这里!

尊敬的读者&#xff1a; 在数字化浪潮中&#xff0c;网络安全问题如暗流涌动&#xff0c;其中.360勒索病毒凭借其独特的攻击方式和难以捉摸的传播路径&#xff0c;成为了网络安全领域的一股“暗黑势力”。本文将带您深入剖析.halo勒索病毒的神秘面纱&#xff0c;并分享一系列独…

【跟着GPT4学JAVA】异常篇

JAVA异常中的知识点 问&#xff1a; 介绍下JAVA中的异常有哪些知识点吧 答&#xff1a; Java中的异常处理是一个重要的知识点&#xff0c;主要包括以下内容: 异常体系&#xff1a;Java的异常类是Throwable类派生出来的&#xff0c;Throwable下有两个重要的子类&#xff1a;Err…

「Android高级工程师」BAT大厂面试基础题集合-下-Github标星6-5K

C、 com.android.provider.contact D、 com.android.provider.contacts 11.下面关于ContentProvider描述错误的是&#xff08;&#xff09;。 A、 ContentProvider可以暴露数据 B、 ContentProvider用于实现跨程序共享数据 C、 ContentProvider不是四大组件 D、 ContentP…

基于SSM大学生健康管理系统的设计与实现

基于SSM大学生健康管理系统的设计与实现 获取源码——》哔站搜&#xff1a;计算机专业毕设大全 获取源码——》哔站搜&#xff1a;计算机专业毕设大全 源码获取——》可以私信

Spring IoCDI(3)

DI详解 接下来学习一下依赖注入DI的细节. 依赖注入是一个过程, 是指IoC容器在创建Bean时, 去提供运行时所依赖的资源, 而资源指的就是对象. 在之前的案例中, 使用了Autowired这个注解, 完成了依赖注入这个操作. 简单来说, 就是把对象取出来放到某个类的属性中. 在一些文章中…

宠物领养(源码+文档)

宠物领养管理系统&#xff08;小程序、ios、安卓都可部署&#xff09; 文件包含内容程序简要说明含有功能项目截图客户端主页举报页注册页领养详细发布寻宠/送养领养页 管理端送养管理用户管理科普管理签到管理 文件包含内容 1、搭建视频 2、流程图 3、开题报告 4、数据库 5、…

CVPR 2024 | 风格迁移和人像生成汇总!扩散模型diffusion用于经典AIGC方向

风格迁移 1、DEADiff: An Efficient Stylization Diffusion Model with Disentangled Representations 基于文本到图像扩散模型在迁移参考风格方面具有巨大潜力。然而&#xff0c;当前基于编码器的方法在迁移风格时显著损害了文本到图像模型的文本可控性。本文提出DEADiff来解决…

【Java】HashMap的简单使用(含小部分源码,get报错问题)

&#x1f4dd;个人主页&#xff1a;哈__ 期待您的关注 一、HashMap的特点 二、HashMap的一些常用方法 ①.put(K key, V value) 将键&#xff08;key&#xff09;/值&#xff08;value&#xff09;映射存放到Map集合中&#xff08;HashMap的key值不可重复&#xff0c;如果已…

2024蓝旭春季第二次前端培训课

目录 CSS伪类与伪元素 伪类 伪元素 关系选择器 分类举例 后代选择器 子元素选择器 相邻兄弟选择器 通用兄弟选择器 作用使用场景 后代选择器&#xff08;空格&#xff09; 子元素选择器 (>) 相邻兄弟选择器 () 通用兄弟选择器 (~) 随机提问 CSS布局 基础布局…

[数据集][目标检测]道路行人车辆坑洞锥形桶检测数据集VOC+YOLO格式6275张4类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;6275 标注数量(xml文件个数)&#xff1a;6275 标注数量(txt文件个数)&#xff1a;6275 标注…

Python 基础:标准库 -- math (数学函数)

1. 官方文档 math --- 数学函数 — Python 3.12.2 文档 cmath --- 关于复数的数学函数 — Python 3.12.2 文档 Python 中&#xff0c;可以使用内置的数学运算符&#xff0c;例如加法 ()、减法 (-)、除法 (/) 和乘法 (*) 进行简单的数学运算。不过&#xff0c;更高级的运算&a…

SQLite版本3中的文件锁定和并发(七)

返回&#xff1a;SQLite—系列文章目录 上一篇&#xff1a;自己编译SQLite或将SQLite移植到新的操作系统&#xff08;六&#xff09; 下一篇&#xff1a;SQLite—系列文章目录 正文&#xff1a; 1.0 SQLite 版本 3 中的文件锁定和并发 SQLite 版本 3.0.0 引入了新的锁…

简单爬虫,爬取某东某商品评论前十页

商品链接地址&#xff1a;【博世四坑5系 6x100x160】博世&#xff08;BOSCH&#xff09;四坑5系&#xff08;1支装&#xff09;圆柄两坑两槽混凝土钻头 6x100x160mm【行情 报价 价格 评测】-京东 首先抓包&#xff0c;用搜索框搜索评论&#xff0c;看评论在哪个包中 为了好看筛…

idea从零开发Android 安卓 (超详细)

首先把所有的要准备的说明一下 idea 2023.1 什么版本也都可以操作都是差不多的 gradle 8.7 什么版本也都可以操作都是差不多的 Android SDK 34KPI 下载地址&#xff1a; AndroidDevTools - Android开发工具 Android SDK下载 Android Studio下载 Gradle下载 SDK Tools下载 …

【PHP编程使用UI框架】——GET和POST的请求方法

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;开发者-曼亿点 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 曼亿点 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a…

实验三智能手机互联网程序设计(微信程序方向)实验报告

实验目的和要求 请编写下方商品列表页面&#xff0c;展示商品名称和价格&#xff1b; 二、实验步骤与结果&#xff08;给出对应的代码或运行结果截图&#xff09; Index.WXML <view class"shop" wx:for"{{10}}"> <vie…

RK3588平台开发系列讲解(I2C开发篇)

目录 前言 I2C 流程 Trasmint only mode(I2C_CON[1:0]2’b00) Mix mode (I2C_CON[1:0]2’b01 or I2C_CON[1:0]2’b11) Receive only mode (I2C_CON[1:0]2’b10) I2C 驱动参数配置 I2C 使用 1 Kernel space 2User space GPIO 模拟 I2C I2C 常见问题 前言 ROCKCHIP 系…

【JavaSE】类和对象详解(上)

欢迎关注个人主页&#xff1a;逸狼 创造不易&#xff0c;可以点点赞吗~ 如有错误&#xff0c;欢迎指出~ 目录 类和对象 类的组成 对类的理解 成员变量的访问和类方法的调用 this 抛出一个问题 this的作用 初始化成员变量 未初始化的成员变量 代码举例 就地初始化 构…