【算法设计与分析】合并区间

题目(难度中等)

        以数组 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. 使用 Arrays.sort 和自定义比较器,根据每个子数组(区间)的第一个元素对 intervals 数组进行排序。

  2. 使用 list 存储合并后的区间。

  3. 循环遍历从第二个区间开始的每个区间。

  4. 将当前区间的起始值与上一个合并区间的结束值(last)进行比较。如果当前区间与上一个合并区间没有重叠,将其添加到列表中。

  5. 如果有重叠,则检查当前区间的结束值是否大于上一个合并区间的结束值。如果是,则更新上一个合并区间的结束值。

  6. 最后,将列表转换回二维数组并作为结果返回。

代码实现 

class Solution {public int[][] merge(int[][] intervals) {Arrays.sort(intervals,(a, b)->a[0]-b[0]);int[] last; List<int[]> list=new ArrayList();int row=intervals.length;int col=intervals[0].length;if(intervals.length<=1){return intervals;}list.add(intervals[0]);last=intervals[0];for(int i=1;i<row;i++){//现在的第一位 与 list中最后一个第二位 比较 》0说明5 4int temp= intervals[i][0]-last[1];if(temp>0){list.add(intervals[i]);last=intervals[i];}else{if(last[1]>intervals[i][1]){continue;}else{list.remove(last);int[] arr= new int[2];arr[0]=last[0];arr[1]=intervals[i][1];list.add(arr);last=arr;}}}return list.toArray(new int[list.size()][2]);}
}

运行结果

时间复杂度:O(nlog⁡n)

空间复杂度:O(log⁡n)

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

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

相关文章

HiddenDesktop:一款针对Cobalt Strike设计的HVNC隐藏桌面工具

关于HiddenDesktop HiddenDesktop是一款针对Cobalt Strike设计的HVNC隐藏桌面工具&#xff0c;该工具专为红队研究人员设计&#xff0c;支持通过远程桌面会话来与目标远程设备执行交互。 值得一提的是&#xff0c;该工具并没有使用到VNC协议&#xff0c;但却能够实现类似的效…

NLP论文阅读记录 - 2021 | WOS 使用分层多尺度抽象建模和动态内存进行抽象文本摘要

文章目录 前言0、论文摘要一、Introduction1.3本文贡献 二.前提三.本文方法四 实验效果4.1数据集4.2 对比模型4.3实施细节4.4评估指标4.5 实验结果4.6 细粒度分析 五 总结思考 前言 Abstractive Text Summarization with Hierarchical Multi-scale Abstraction Modeling and Dy…

原生IP代理如何帮助跨境电商店铺做谷歌广告投放业务的?

随着全球化的发展&#xff0c;越来越多的电商店铺开始拓展跨境业务&#xff0c;而谷歌广告作为全球最大的广告平台之一&#xff0c;为跨境电商店铺带来了巨大的收益和商机。 然而&#xff0c;由于谷歌广告的地域限制和审查机制&#xff0c;店铺很难直接进行投放业务&#xff0…

Java、SpringBoot实现对Excel内容的读取并将Excel内容导入到数据库中(后端篇)

一、需要读取的Excel表格格式相对完整工整&#xff0c;且只需要写入一张表中 在读取Excel表格的需求中&#xff0c;有像下图的这么一种表格&#xff0c;它的格式工整&#xff0c;且表格中的列名和数据库表中的列名一一对应&#xff0c;如下图&#xff1a; Excel表&#xff1a;…

四大攻击类型并存,NIST 警告人工智能系统带来的安全和隐私风险

美国国家标准与技术研究院 (NIST) 近日发布了有关对抗性机器学习 (AML) 攻击和缓解措施指南&#xff0c; 呼吁人们再度关注近年来人工智能 (AI) 系统部署增加所带来的隐私和安全挑战&#xff0c;并表示这类系统目前没有万无一失的方法进行保护。 NIST指出&#xff0c;这些安全…

力扣日记1.14-【二叉树篇】108. 将有序数组转换为二叉搜索树

力扣日记&#xff1a;【二叉树篇】108. 将有序数组转换为二叉搜索树 日期&#xff1a;2023.1.14 参考&#xff1a;代码随想录、力扣 108. 将有序数组转换为二叉搜索树 题目描述 难度&#xff1a;简单 给你一个整数数组 nums &#xff0c;其中元素已经按 升序 排列&#xff0c;…

开源ERP系统Odoo安装部署并结合内网穿透实现公网访问本地系统

文章目录 前言1. 下载安装Odoo&#xff1a;2. 实现公网访问Odoo本地系统&#xff1a;3. 固定域名访问Odoo本地系统 前言 Odoo是全球流行的开源企业管理套件&#xff0c;是一个一站式全功能ERP及电商平台。 开源性质&#xff1a;Odoo是一个开源的ERP软件&#xff0c;这意味着企…

Elasticsearch添加7.17.10IK分词器

Elasticsearch添加7.17.10IK分词器 在https://github.com/medcl/elasticsearch-analysis-ik/tree/7.x中未找到7.17.10版本的发布版本&#xff0c;如歌ik版本和Elasticsearch版本不同安装后无法启动。所以下载git上的源代码&#xff0c;并手动编译指定版本IK分词器。 &#xff…

ucloud轻量云(wordpress)配置ssl

ucloud 轻量云(wordpress)配置ssl 1、上传ssl证书到/usr/local/software/apache/conf&#xff0c;这里的文件名和内容与ucloud控制台下载下来的文件名和内容保持一致 2、修改httpd.conf文件 vim /usr/local/software/apache/conf/httpd.conf 找到下面两行&#xff0c;去掉注…

TDA4 Linux BSP ,SD卡制作

1 进入官网&#xff1a; Processor SDK Linux Software Developer’s Guide — Processor SDK Linux for J721e Documentation 这个版本需要 Ubuntu 22.04 支持 ~/ti-processor-sdk-linux-adas-j721e-evm-09_01_00_06/board-support/ti-linux-kernel-6.1.46gitAUTOINC5892b80…

如何实现无公网ip固定TCP端口地址远程连接Oracle数据库

文章目录 前言1. 数据库搭建2. 内网穿透2.1 安装cpolar内网穿透2.2 创建隧道映射 3. 公网远程访问4. 配置固定TCP端口地址4.1 保留一个固定的公网TCP端口地址4.2 配置固定公网TCP端口地址4.3 测试使用固定TCP端口地址远程Oracle 前言 Oracle&#xff0c;是甲骨文公司的一款关系…

三种引入CSS的方式

文章目录 CSS基础知识概述CSS的注释CSS的格式 三种引入CSS的方式内嵌式外链式行内式优先级 CSS基础知识 概述 Cascading Style Sheet 层叠样式表 前端三大基础之一(Html结构 CSS样式 JS动作) 最早由网景公司&#xff08;Netscape&#xff09;提出&#xff0c;在1996年受到w…

【HarmonyOS4.0】第十篇-ArkUI布局容器组件(二)

三、层叠布局容器&#xff08;Stack&#xff09; 堆叠容器组件 Stack的布局方式是把子组件按照设置的对齐方式顺序依次堆叠&#xff0c;后一个子组件覆盖在前一个子组件上边。 注意&#xff1a;Stack 组件层叠式布局&#xff0c;尺寸较小的布局会有被遮挡的风险&#xff0c; …

1.15 作业

使用计数型信号量设计 2&#xff0c;相关函数的API 一、队列&#xff1a; 1&#xff0c;创建队列函数 osMessageQueueId_t osMessageQueueNew (uint32_t msg_count, uint32_t msg_size, const osMessageQueueAttr_t *attr); msg_count : 队列中消息的最大数量&#xff0c;即…

并发编程之阻塞队列

目录 什么是队列&#xff1f; Queue接口 阻塞队列 应用场景 ArrayBlockingQueue ArrayBlockingQueue使用 ArrayBlockingQueue的原理 数据结构 入队put方法 出队take方法 LinkedBlockingQueue LinkedBlockingQueue使用 LinkedBlockingQueue原理 数据结构 入队put方…

vtk qt切割stl模型

一直想实现对stl模型的某个方向进行平面切割 通过滑动slider然后对模型进行某一个方向的面切割。同时可以用鼠标对模型进行移动缩放&#xff0c;旋转等操作。然后可以加一些颜色点云显示等操作。 stl加载&#xff1a; QString selectFilePath QFileDialog::getOpenFileName…

JS遍历对象的方法及特点

1、定义一个对象 let obj {name: Tom,age: 20,sex: 男,};obj.weight 70kg;// obj的原型上定义属性Object.prototype.height 180cm;Object.prototype.major function() {console.log(专业&#xff1a;计算机应用技术);};console.log(obj, obj); 控制台输出的obj中&#xff…

Java_线程安全

一、多线程常用方法 下面我们演示一下getName()、setName(String name)、currentThread()、sleep(long time)这些方法的使用效果。 public class MyThread extends Thread{public MyThread(String name){super(name); //1.执行父类Thread(String name)构造器&#xff0c;为当前…

通过DTS实现PG14迁移到人大金仓V8R6

迁移需求 xxx项目适配人大金仓&#xff0c;测试环境195pgsql数据库需要进行迁移至192.168.3.29 人大金仓数据库&#xff1b; 数据库信息 ip os登录账号密码 数据库类型 数据库端口 数据库 数据库用户密码 源库 192.168.3.15 root/123456 PG14.2 5432 ahtjtestnew …

【数据结构】排序之归并排序与计数排序

个人主页 &#xff1a; zxctsclrjjjcph 文章封面来自&#xff1a;艺术家–贤海林 如有转载请先通知 目录 1. 前言2. 归并排序2.1 递归实现2.1.1 分析2.1.2 代码实现 2.2 非递归实现2.2.1 分析2.2.2 代码实现 3. 计数排序3.1 分析3.2 代码实现 4. 附代码4.1 Sort.h4.2 Sort.c4.3…