LeetCode题练习与总结:插入区间--57

一、题目描述

示例 1:

输入:intervals = [[1,3],[6,9]], newInterval = [2,5]
输出:[[1,5],[6,9]]

示例 2:

输入:intervals = [[1,2],[3,5],[6,7],[8,10],[12,16]], newInterval = [4,8]
输出:[[1,2],[3,10],[12,16]]
解释:这是因为新的区间 [4,8][3,5],[6,7],[8,10] 重叠。

二、解题思路

  1. 初始化结果列表:创建一个列表来存储最终的区间结果。

  2. 遍历区间:遍历intervals数组和newInterval,对于每个区间,检查它与newInterval的关系。

  3. 处理区间:如果当前区间与newInterval不重叠,直接将其添加到结果列表中。如果重叠,需要将newInterval与当前区间合并,并将合并后的区间添加到结果列表中。

  4. 返回结果:将结果列表转换为二维数组并返回。

三、具体代码

import java.util.ArrayList;
import java.util.List;public class Solution {public int[][] insert(int[][] intervals, int[] newInterval) {List<int[]> result = new ArrayList<>();int start = newInterval[0];int end = newInterval[1];for (int[] interval : intervals) {if (interval[0] > end) {// 当前区间在newInterval的右侧,直接添加到结果中result.add(new int[]{start, end});start = interval[0];end = interval[1];} else if (interval[1] < start) {// 当前区间在newInterval的左侧,不需要合并,直接添加到结果中result.add(interval);} else {// 当前区间与newInterval有重叠,需要合并// 更新start和end为合并后的区间的起始和结束点start = Math.min(start, interval[0]);end = Math.max(end, interval[1]);}}// 添加最后一个区间result.add(new int[]{start, end});// 将列表转换为二维数组并返回return result.toArray(new int[0][0]);}public static void main(String[] args) {Solution sol = new Solution();int[][] intervals = {{1,2},{3,5},{6,7},{8,10},{12,16}};int[] newInterval = {4,8};int[][] result = sol.insert(intervals, newInterval);for (int[] interval : result) {System.out.println("[" + interval[0] + ", " + interval[1] + "]");}}
}

四、时间复杂度和空间复杂度

1. 时间复杂度
  • 时间复杂度是O(n)。
  • 该算法的主要操作是遍历intervals数组中的每个区间,并与newInterval进行比较和合并。
  • 这个操作是线性的,因为它只涉及一次遍历,所以时间复杂度为O(n),其中n是intervals数组的长度。
2. 空间复杂度
  • 空间复杂度是O(n)。
  • 算法中使用了一个List<int[]>来存储结果,最坏情况下,这个列表将包含所有原始区间加上newInterval。因此,空间复杂度为O(n),其中n是intervals数组的长度。
  • 由于result.toArray(new int[0][0])这一行代码,算法还需要额外的空间来创建一个二维数组。这个数组的大小最多为intervals的长度加1,所以这部分的空间复杂度也是O(n)。

五、总结知识点

  1. 二维数组(int[][] intervals):用于存储区间列表,其中每个区间由一个包含两个整数的数组表示。

  2. 一维数组(int[] newInterval):表示要插入的单个区间。

  3. ArrayList 和 List 接口:用于动态存储和管理区间。ArrayList是一个可动态扩展和收缩的数组实现,提供了灵活的添加、删除和访问元素的方法。

  4. for-each 循环:用于遍历数组和列表中的元素。这是一种简洁的循环语法,允许我们直接访问集合中的每个元素,而不需要处理迭代器或索引。

  5. 条件语句(if-else):用于根据不同的条件执行不同的代码块。在这个例子中,我们根据区间的位置和关系来决定是否合并区间。

  6. 数组操作:包括创建数组、访问数组元素和修改数组元素的值。

  7. Math.min 和 Math.max 方法:用于计算两个数值中的最小值和最大值,这在合并区间时非常有用。

  8. toArray 方法List接口的toArray方法用于将列表转换为数组。在Java中,如果目标数组的类型与列表中元素的类型不匹配,需要指定目标数组的类型。

  9. 方法的返回值:方法insert返回一个二维数组,表示合并后的区间列表。

以上就是解决这个问题的详细步骤,希望能够为各位提供启发和帮助。

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

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

相关文章

深度学习-机器视觉part2

深度学习-机器视觉part2 文章目录 深度学习-机器视觉part2一、从卷积到卷积神经网络二、手撕卷积代码2.1 动机2.2 数据集2.3 卷积操作2.3.1 填充&#xff08;padding&#xff09;2.3.2 卷积块2.3.3 池化2.3.4 Softmax 2.4 完整CNN2.5 训练改进 三、经典CNN模型介绍四、CNN模型的…

IDEA删除块注释(文档注释)/**

1. 问题缘由 在使用java写LeetCode的时候&#xff0c;有些题会有一些封装好的类&#xff0c;在本地编写代码的时候&#xff0c;如果没有定义好这些类&#xff0c;就会爆红&#xff0c;看着很难受&#xff0c;此时可以把官方定义好的类拿过来&#xff0c;但是这些类是有块注释的…

VM虚拟机部署code-server服务+tailscale内网穿透,实现随处coding

1.Linux下安装code-server Releases coder/code-server (github.com)https://github.com/coder/code-server/releases先去发布页面查看最新的code-server版本&#xff0c;下载命令示例&#xff1a; wget https://github.com/coder/code-server/releases/download/v4.22.1/co…

KeyguardClockSwitch的父类

KeyguardClockSwitch 定义在KeyguardStatusView中, mClockView findViewById(R.id.keyguard_clock_container);KeyguardClockSwitch的父类为&#xff1a; Class Name: LinearLayout Class Name: KeyguardStatusView Class Name: NotificationPanelView Class Name: Notificat…

如何注册midjourney账号

注册Midjourney账号比较简单&#xff0c;准备好上网工具&#xff0c;进入官网 Midjourney访问地址&#xff1a; https://www.midjourney.com/ 目前没有免费使用额度了&#xff0c;会员最低 10 美元/月&#xff0c;一般建议使用30美元/月的订阅方案。了解如何订阅可以查看订阅…

hive的使用(本地数据上传到idea)

1.首先第一步是先启动hive&#xff0c;hive的启动指令如下 nohup hiveserver2 & 2.然后我们进入idea中 这里我们使用的是idea里的Apache Hive的插件&#xff0c;进行配置&#xff0c;等我们跟moba连接好后&#xff0c;就可以进行数据的导入了。 hive的sql和mysql里的sql语…

基于单片机电子硬币储存器的设计

**单片机设计介绍&#xff0c;基于单片机电子硬币储存器的设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机电子硬币储存器的设计概要主要涵盖了硬件设计、软件设计、硬币识别、计数与储存等核心功能。以下是对该设…

ddres( ) 组站星双差方程和设计矩阵

1 ddres( )参数介绍 rtklib中进行的单频解算 双差观测值&#xff0c;单差的模糊度 单频点双差 DD (double-differenced) phase/code residuals ------------------------------ x 模糊度 P 方差-协方差阵 sat 共识卫星列表 ns 共识卫星数量 y…

Vue3_2024_7天【回顾上篇watch常见的后两种场景】

随笔&#xff1a;这年头工作不好找咯&#xff0c;大家有学历提升的赶快了&#xff0c;还有外出人多注意身体&#xff0c;没错我在深圳这边阳了&#xff0c;真的绝啊&#xff0c;最尴尬的还给朋友传染了&#xff01;&#xff01;&#xff01; 之前三种的监听情况&#xff0c;监听…

notion的使用心得

从老石的视频知道了notion是一个很强大的管理工具&#xff1a;这就是最棒的效率软件&#xff01;如果不是&#xff0c;我倒想试试你的 | Notion使用技巧分享_哔哩哔哩_bilibili 我一时半会不能全部学会&#xff0c;但是借用大家的好模板&#xff1a;如何用5分钟搭建简洁高效的…

爬虫实战一、Scrapy开发环境(Win10+Anaconda3)搭建

#前言 在这儿推荐使用Anaconda进行安装&#xff0c;并不推荐大家用pythonpip安装&#xff0c;因为pythonpip的坑实在是太多了。 #一、环境中准备&#xff1a; Win10&#xff08;企业版&#xff09;Anaconda3-5.0.1-Windows-x86_64&#xff0c;下载地址&#xff0c;如果打不开…

MySQL安装卸载-合

目录 1.Linux下安装 1.1下载 1.2.上传 ​​​​​​​1.3.解压 ​​​​​​​1.4.安装 ​​​​​​​1.5.启动服务 ​​​​​​​1.6.查询临时密码 ​​​​​​​1.7.修改临时密码 ​​​​​​​1.8.创建用户 ​​​​​​​1.9.分配权限 ​​​​​​​1.10.重…