LeetCode刷题之HOT100之合并区间

news2024/11/20 0:30:37

雨下了一整天,中午早早就回去吃饭拿快递了,今天拿了很多快递。我的书回来啦哈哈,还有好多零食,爽歪歪啊,放在下面了,然后准备开始做题啦!
在这里插入图片描述
图一:左一是xh送我的,非常精彩(其他都是618购入)只买了陀爷和小波的,白夜行是朋友极力推荐购入
下次购书就不知道是啥时候了,毕竟现在任务落在我们身上,很难挤出时间来看看。Anyway,随性些,做题吧!

1、题目描述

在这里插入图片描述

2、逻辑分析

题目要求很清晰。我的大致思路是:遍历每个数组,将 i + 1个数组的第一个元素a与第 i 个数组的第二个元素b进行比较,如果a < b , 那么这两个数组满足要求,需要合并。如 [1,3] , [2,6]。2 < 3,亟需合并。是的,我写不出来。看了题解发现我想的太easy,很多情况未考虑。题解思路:

  1. 先排序,将整个数组以第一个元素进行排序。
  2. 遍历区间,如果结果数组是空的,或者当前区间的起始位置 >
    结果数组中最后区间的终止位置,则不合并,直接将当前区间加入结果数组。反之将当前区间合并至结果数组的最后区间。

3、代码演示

public int[][] merge(int[][] intervals) {
        // 第一步:根据区间的起始值对数组进行排序  
        // 使用lambda表达式定义排序规则,按照每个区间的第一个元素(即起始值)进行升序排序
        Arrays.sort(intervals, (v1, v2) -> v1[0] - v2[0]);
        // 第二步:初始化结果数组,大小与原始区间数组相同(但可能不完全使用)
        int [][] res = new int[intervals.length][2];
        // index用于跟踪结果数组中当前已使用的最后一个位置
        int index = -1;
        // 第三步:遍历排序后的区间数组
        for(int [] interval : intervals){
            // 如果结果数组为空,或者当前区间的起始值大于结果数组中最后一个区间的结束值  
            // 则说明当前区间与前一个区间没有重叠,可以直接添加到结果数组中
            if(index == -1 || interval[0] > res[index][1]){
                // 注意这里++index是先使用index的值,再自增
                res[++index] = interval;
            }else{
                // 如果当前区间与前一个区间有重叠  
                // 则更新结果数组中最后一个区间的结束值为当前区间和前一个区间的结束值中的较大者  
                // 这样可以确保合并后的区间包含所有重叠的部分  
                res[index][1] = Math.max(res[index][1], interval[1]);
            }
        }
        // 第四步:返回合并后的区间数组  
        // 因为结果数组可能并没有完全使用,所以需要复制一个只包含有效区间的新数组  
        // Arrays.copyOf方法用于创建一个新数组,并复制指定长度的元素到新数组中
        return Arrays.copyOf(res, index + 1);// index + 1表示有效区间的数量
    }

这注释解释的较明了,一看就会,一做就废,还在新手期,加油吧!hx。
在这里插入图片描述

4、复杂度分析

时间复杂度: O ( n log ⁡ n ) O(n\log n) O(nlogn)。其中 n 为区间的数量。除去排序的开销,我们只需要一次线性扫描,所以主要的时间开销是排序的 O ( n log ⁡ n ) O(n\log n) O(nlogn)
空间复杂度: O ( log ⁡ n ) O(\log n) O(logn)。其中 n 为区间的数量。这里计算的是存储答案之外,使用的额外空间。 O ( log ⁡ n ) O(\log n) O(logn) 即为排序所需要的空间复杂度。

over,拜拜~

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

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

相关文章

测试基础09:缺陷(bug)生命周期、定位方式和管理规范

课程大纲 1、缺陷&#xff08;bug&#xff09;生命周期 2、缺陷&#xff08;bug&#xff09;提交规范 2.1 宗旨 简洁、清晰、可视化&#xff0c;减少沟通成本。 2.2 bug格式和内容 ① 标题&#xff1a;一级功能-二级功能-三级功能_&#xff08;一句话描述bug&#xff1a;&…

什么是证书吊销?面对证书吊销,应采取什么措施?

SSL证书是网络安全的重要组成部分&#xff0c;它确保了网站与用户之间的信息传输安全。然而&#xff0c;SSL证书也可能因为某些原因被吊销&#xff0c;这就需要我们了解证书吊销的概念、原因以及应对措施。 证书吊销的定义 证书吊销是指已经签发的SSL证书被证书颁发机构&…

【JVM】已验鼎真,鉴定为:妈妈加载的(双亲委派模型)

【JVM】已验鼎真&#xff0c;鉴定为&#xff1a;妈妈加载的&#xff08;双亲委派模型&#xff09; 在Java的世界中&#xff0c;类加载器&#xff08;ClassLoader&#xff09;是Java虚拟机&#xff08;JVM&#xff09;用来动态加载类的基础组件。双亲委派模型&#xff08;Paren…

java多线程原理

1.线程创建与启动&#xff1a;通过继承Thread类或实现Runnable接口创建线程&#xff0c;并调用start()方法启动线程。 1.线程状态&#xff1a;线程在其生命周期中有多种状态&#xff0c;包括新建、运行、阻塞、死亡等。了解这些状态以及如何在它们之间转换对于管理线程至关重要…

人工智能在病理组学中的发展历程概述|24年6月·顶刊速递·06-04

小罗碎碎念 今天分享的七篇文章&#xff0c;主题非常明确——人工智能在数字病理领域的发展情况。 前六篇文献选自Nature&#xff0c;第七篇文献选自Cell&#xff0c;文献的发表时间从2019年跨越至2024年&#xff0c;囊括了AI在数字病理领域的里程碑式进展。 这期推文值得所有…

输出流--6.6

代码以及解释&#xff1a; package java2;import java.io.File; import java.io.FileWriter; import java.io.IOException;public class Test02 {public static void main(String[] args) throws IOException {String str "flag{hello_ctf}";//1.封装File fnew Fil…

代码解读 | Hybrid Transformers for Music Source Separation[02]

一、背景 今天对Hybrid Transformer Demucs代码进行解读&#xff0c;目标&#xff1a;对图c中各个模块对应的代码进行解读&#xff08;时域编码、频域编码、时域解码、频域解码、Cross-Domain Transformer Encoder模块、STFT模块、ISTFT模块&#xff09;。解读的代码是开源工程…

深入解析ArrayList是如何实现自动扩容的?【源码深度解析】

一 、分析ArrayList扩容源码 通过在 &#xff08;JDK 6 及更低版本中&#xff09;API我们知道&#xff0c;调用无参构造创建的ArrayList集合&#xff0c;初始容量为10 接下来我们深入源码&#xff0c;探究当时作者是怎么构思的 借助Debug工具&#xff0c;一步一步进入 上图看到…

list的简单模拟实现

文章目录 目录 文章目录 前言 一、使用list时的注意事项 1.list不支持std库中的sort排序 2.去重操作 3.splice拼接 二、list的接口实现 1.源码中的节点 2.源码中的构造函数 3.哨兵位头节点 4.尾插和头插 5.迭代器* 5.1 迭代器中的operator和-- 5.2其他迭代器中的接口 5.3迭代器…

web学习笔记(六十二)

目录 1.键盘事件 2.KeepAlive 3.组件传值 3.1 兄弟组件传值 3.2 组件树传值 3.3 发布订阅者传值 1.键盘事件 keydown表示键盘事件&#xff0c;在不加修饰符的情况下&#xff0c;点击键盘上的任意位置都可以触发键盘事件&#xff0c; <template><div><!--…

LeetCode-82. 删除排序链表中的重复元素 II【链表 双指针】

LeetCode-82. 删除排序链表中的重复元素 II【链表 双指针】 题目描述&#xff1a;解题思路一&#xff1a;用一个cur即可实现去重cur.next cur.next.next背诵版&#xff1a;解题思路三&#xff1a;0 题目描述&#xff1a; 给定一个已排序的链表的头 head &#xff0c; 删除原始…

HTML静态网页成品作业(HTML+CSS)—— 父亲节节日介绍网页(4个页面)

&#x1f389;不定期分享源码&#xff0c;关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 &#x1f3f7;️本套采用HTMLCSS&#xff0c;未使用Javacsript代码&#xff0c;共有4个页面。 二、作品演示 三、代…

【学习心得】算法刷题心得分享

一、为什么要刷题&#xff1f; 提升编程能力&#xff0c;强化对数据结构的理解&#xff0c;熟练掌握常用的算法等为竞赛、考试做准备找实习、找工作需要&#xff08;上机考试面试手撕代码&#xff09;提升自信心&#xff0c;放松一下 二、刷题前应该有哪些知识储备&#xff1f;…

java代码审计之fastjson反序列化漏洞

fastjson反序列化漏洞分析 Fastjson 是一个 Java 库&#xff0c;可以将 Java 对象转换为 JSON 格式&#xff0c;当然它也可以将 JSON 字符串转换为 Java 对象。Fastjson 可以操作任何 Java 对象&#xff0c;即使是一些预先存在的没有源码的对象。该产品主要提供了两个接口&…

官宣!2024 MongoDB Developer Day来了!北上深三场等你集结!

北上深开发者 专为你们打造的 MongoDB Developer Day 来了&#xff01; 动手实操工作坊➕模型设计优化专场 学习 NoSQL 数据建模的最佳实践 深入探索 MongoDB 的各种可能性 和开发者同行和 MongoDB 技术专家 一起度过充实的一天&#xff01; 北京&#xff08;6/22&…

UMLChina为什么叒要翻译《分析模式》?

UMLChina受机械工业出版社委托&#xff0c;重新翻译《分析模式》。 Martin Fowler的“Analysis Patterns&#xff0c;Reusable Object Models”&#xff0c;原书出版于1997年&#xff0c;至今为止未出第2版。 2004年&#xff0c;机械工业出版社出版该书中译本《分析模式》。 …

Django render()函数页面渲染

1&#xff0c; render() 函数 在Django框架中&#xff0c;render() 函数是一个非常有用的快捷方式&#xff0c;用于从视图函数返回一个完整的HTTP响应。它负责将给定的模板与上下文数据结合&#xff0c;渲染出最终的HTML页面&#xff0c;并返回一个HttpResponse对象。 from d…

千锋教育大优惠

IT全学科自学至尊卡&#xff08;3年卡&#xff09; Linux云计算运维、Python全栈、数据分析、人工智能、Java、大前端、网络安全、物联网、全媒体、影视剪辑等14大主流方向&#xff0c;300精品视频课程免费学。课程持续更新&#xff0c;电脑端手机APP小程序多平台无忧畅学&…

JavaWeb1 Json+BOM+DOM+事件监听

JS对象-Json //Json 字符串转JS对象 var jsObject Json.parse(userStr); //JS对象转JSON字符串 var jsonStr JSON.stringify(jsObject);JS对象-BOM BOM是浏览器对象模型&#xff0c;允许JS与浏览器对话 它包括5个对象&#xff1a;window、document、navigator、screen、hi…

【人工智能】第一部分:ChatGPT的基本概念和技术背景

人不走空 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌赋&#xff1a;斯是陋室&#xff0c;惟吾德馨 目录 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌…