【数组】Leetcode 57. 插入区间【中等】

插入区间

  • 给你一个 无重叠的 ,按照区间起始端点排序的区间列表 intervals,其中 intervals[i] = [starti, endi] 表示第 i 个区间的开始和结束,并且 intervals 按照 starti 升序排列。同样给定一个区间 newInterval = [start, end] 表示另一个区间的开始和结束。

  • 在 intervals 中插入区间 newInterval,使得 intervals 依然按照 starti 升序排列,且区间之间不重叠(如果有必要的话,可以合并区间)。

  • 返回插入之后的 intervals。

注意 你不需要原地修改 intervals。你可以创建一个新数组然后返回它。

示例 1:

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

解题思路

需要将 newInterval 插入到有序且无重叠的区间列表 intervals 中,并且在插入之后仍保持区间的无重叠和有序特性。

  • 1、遍历 intervals,将所有在 newInterval 之前的区间直接加入结果列表 result(在之前的是不会有交集的)。
  • 2、检查是否有需要合并的区间:
  •   如果当前区间与 newInterval 有重叠,则合并它们,更新 newInterval 的起始和结束位置。
    
  •  如果当前区间不再与 newInterval 重叠,说明 newInterval 应该插入在当前位置之前,将 newInterval 加入 result,然后继续将当前及之后的区间加入 result。
    
  • 3、如果遍历完所有区间后 newInterval 仍未被插入,则将 newInterval 加入 result。

Java实现

public class InsertInterval {public int[][] insert(int[][] intervals, int[] newInterval) {List<int[]> result = new ArrayList<>();int i = 0;int n = intervals.length;// 添加所有在 newInterval 之前的区间(没有交集的前半部分)while (i < n && intervals[i][1] < newInterval[0]) {result.add(intervals[i]);i++;}// 合并重叠的区间while (i < n && intervals[i][0] <= newInterval[1]) {//找到最后一个合并的区间newInterval[0] = Math.min(newInterval[0], intervals[i][0]);newInterval[1] = Math.max(newInterval[1], intervals[i][1]);i++;}//加入合并后的区间result.add(newInterval);// 添加newInterval之后的区间(没有交集的后半部分)while (i < n) {result.add(intervals[i]);i++;}return result.toArray(new int[result.size()][]);}public static void main(String[] args) {InsertInterval insertInterval = new InsertInterval();int[][] intervals1 = {{1, 3}, {6, 9}};int[] newInterval1 = {2, 5};int[][] result1 = insertInterval.insert(intervals1, newInterval1);// 输出: [[1, 5], [6, 9]]for (int[] interval : result1) {System.out.println("[" + interval[0] + ", " + interval[1] + "]");}System.out.println("--------------------------------------" );int[][] intervals2 = {{1, 2}, {3, 5}, {6, 7}, {8, 10}, {12, 16}};int[] newInterval2 = {4, 9};int[][] result2 = insertInterval.insert(intervals2, newInterval2);// 输出: [[1, 2], [3, 10], [12, 16]]for (int[] interval : result2) {System.out.println("[" + interval[0] + ", " + interval[1] + "]");}}
}

时间空间复杂度

  • 时间复杂度: O(n),其中 n 是区间数组 intervals 的长度。需遍历一次 intervals。
  • 空间复杂度: O(n),用于存储结果列表 result。新数组 result 包含最多 intervals.length + 1 个区间。

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

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

相关文章

深入解析文华量化交易策略---交易指令如何选择

随着金融投资的迅猛发展&#xff0c;自动化策略模型已逐渐成为现代投资领域的一股重要力量。量化交易模型均以数据为驱动&#xff0c;通过运用数学模型和算法&#xff0c;对期货、黄金等投资市场走势进行精准预测和高效交易。 艾云策略整理了量化策略相关资料&#xff0c;希望通…

【Golang】在Go语言中如何实现接口

文章目录 前言一、函数解释二、代码实现三、总结 前言 接口是Go语言中的一个核心概念&#xff0c;它为类型定义了行为。接口提供了一种方式&#xff0c;使得不同的类型可以被同样对待&#xff0c;只要它们实现了相同的接口。在这篇博客中&#xff0c;我们将讨论如何在Go语言中…

浅谈后端boot框架整合第三方技术JUnit MyBatis Druid整体思想

整合第三方技术 不要单单学习指定技术与springboot整合的方式 学习目标的是整合整体的技术的思路 拿到任何一个第三方技术后我们在springboot中如何操作 这是真正我们应该学习的东西 以后能整合任意技术 整合JUnit JUnit 是一个流行的开源测试框架&#xff0c;用于 Java …

jeb调试发现只能找到sh和ps两个进程

jeb调试发现只能找到sh和ps两个进程: . Android版本变化 Android 7.0及以上版本的变更&#xff1a;从Android 7.0开始&#xff0c;ps命令的实现从toolbox更改为toybox&#xff0c;这导致了ps命令的行为发生了变化。默认行为的调整&#xff1a;在新版本的Android中&#xff0c…

如何快速复现NEJM文章亚组分析森林图?

现在亚组分析好像越来越流行&#xff0c;无论是观察性研究还是RCT研究&#xff0c;亚组分析一般配备森林图。 比如下方NEJM这张图&#xff0c;配色布局都比较经典美观&#xff01; 但是在使用R语言绘制时&#xff0c;想要绘制出同款森林图&#xff0c;少不了复杂参数进行美化调…

详细带你了解什么是软件源

文章目录 什么是软件源软件源的组成软件源的类型配置软件源软件源的管理命令Debian和基于Debian的发行版&#xff08;如Ubuntu、Kali Linux&#xff09;更新软件源列表&#xff1a;升级已安装的软件包&#xff1a;完整升级&#xff1a;安装新软件包&#xff1a;删除软件包&…

windows安装kafka环境

1.安装jdk8 参考教程java8安装教程_java8u371安装教程-CSDN博客 下载kafak安装包&#xff1a; kafka_2.12-3.6.1.tgz 解压&#xff1a; 启动ZooKeeper软件&#xff0c;kafka内部已近集成了该软件。 进入Kafka解压缩文件夹的config目录&#xff0c;修改zookeeper.properti…

傲软抠图一款专为抠图打造的AI智能抠图应用,智能识别人物物体抠图软件,无广vip版 v1.8.1

软件介绍 傲软抠图&#xff0c;作为一款高度专业化的智能人工智能图片处理软件&#xff0c;被设计专门用于执行精确的图像提取功能。该程序利用其先进的算法能动地识别和分辨图像中的人物或物体轮廓&#xff0c;并能够从原始图片材料中分离出带有透明背景的目标图像。除了自动…

Cisco Nexus9508交换机硬盘bug补丁SMU安装步骤

Cisco Nexus9508交换机硬盘bug补丁SMU安装步骤 1 背景 客户1台Nexus9508交换机&#xff0c;当前软件版本存在SSD硬盘BUG&#xff0c;需要打补丁 bug相关链接 https://quickview.cloudapps.cisco.com/quickview/bug/CSCvx21260 Conditions: This cli can be used for any NXO…

GIT 新建分支和合并分支

文章目录 前言一、新建分支二、切回老分支&#xff0c;保留新分支的更改三、合并分支 前言 本文主要针对以下场景进行介绍&#xff1a; 场景一&#xff1a;创建新的分支 当前分支(dev_1)已经开发完毕&#xff0c;下一期的需求需要在新分支(dev_2)上进行开发&#xff0c;如何创…

【网络】网络编程中的粘包问题

1. 什么是粘包问题&#xff1f; 粘包问题指的是在基于流的协议中&#xff0c;接收方收到的数据不是按照发送方发送的消息边界来划分的&#xff0c;而是多个消息粘在一起&#xff0c;或者一个消息被分割成多个部分接收。 2. 为什么会出现粘包问题&#xff1f; &#xff08;1&a…

[机缘参悟-187] - 《道家-水木然人间清醒1》读书笔记 - 真相本质 -10- 关系界限 - 一个人只有放下自我,才能看清世界的真相

目录 一、现实生活中&#xff0c;每个人都是盲人摸象 二、一个人认知的本质是神经网络的模型训练 三、每个人的认知具有局限 四、放下自我&#xff0c;就是跳出自我的认知局限 五、站在上帝的视角&#xff0c;俯瞰不同众生的千差万别的大脑认知系统 六、个体的独特性&…

【Linux】信号>信号产生信号处理信号保存信号详解

主页&#xff1a;醋溜马桶圈-CSDN博客 专栏&#xff1a;Linux_醋溜马桶圈的博客-CSDN博客 gitee&#xff1a;mnxcc (mnxcc) - Gitee.com 目录 1.信号入门 1.1 生活角度的信号 1.2 技术应用角度的信号 1.3 信号概念 1.4 信号处理常见方式概览 2.产生信号 2.1 通过终端按键…

打包要求 minCompileSdk 使用指定版本及以上

我当前的 compileSdkVersion 30&#xff0c;因为依赖了 androidx.core:core:1.9.0 它要求最低 compileSdkVersion 33。 那么如果我不想升级 compileSdkVersion 应该怎么办&#xff1f; 答&#xff1a;当然是降低 core:core 版本&#xff01; 看看谁依赖了这两个版本 android…

CAN笔记第二篇,车载测试继续学起来!

在CAN协议中&#xff0c;“帧”是一个包含完整信息的独立单元&#xff0c;它具有特定的格式和结构&#xff0c;以确保数据在CAN总线上的可靠传输。这里的“帧”字可以理解为&#xff1a; 完整性&#xff1a;一个帧包含了所有必要的信息&#xff0c;从起始到结束&#xff0c;都遵…

GEE深度学习——地代码作物分类(Vertex AI 机器学习MLPINGTAI )

低代码作物分类 AutoML 能以最小的技术投入创建和训练模型。本示例演示了使用 Vertex AI Python SDK 训练和部署一个 AutoML 表格式模型,然后从 Earth Engine 连接到该模型,对国家农业图像计划 (NAIP) 航空图像中的作物类型进行分类。 本教程的主要流程是为了将选好的训练数…

# 分布式链路追踪_skywalking_学习(2)

分布式链路追踪_skywalking_学习&#xff08;2&#xff09; 一、分布式链路追踪_skywalking &#xff1a;Rpc 调用监控 1、Skywalking(6.5.0) 支持的 Rpc 框架有以下几种&#xff1a; Dubbo 2.5.4 -> 2.6.0Dubbox 2.8.4Apache Dubbo 2.7.0Motan 0.2.x -> 1.1.0gRPC 1.…

LeetCode 968.监控二叉树 (hard)

968.监控二叉树 力扣题目链接(opens new window) 给定一个二叉树&#xff0c;我们在树的节点上安装摄像头。 节点上的每个摄影头都可以监视其父对象、自身及其直接子对象。 计算监控树的所有节点所需的最小摄像头数量。 贪心思路&#xff1a; 从下往上看&#xff0c;局部最…

excel数据导入到数据库的方法(二)

以前写了一篇excel导入数据到数据库的文章&#xff0c;是先将excel导入到datatable中在进行批量插入操作&#xff0c;实现数据的导入工作&#xff1b;最近在写一个上传数据服务时&#xff0c;发现有些许问题&#xff0c;在此予以更正&#xff0c;问题描述&#xff1a; 就会报异…

C++_vector简单源码剖析:vector模拟实现

文章目录 &#x1f680;1.迭代器&#x1f680;2.构造函数与析构函数⚡️2.1 默认构造函数vector()⚡️2.2 vector(int n, const T& value T())⚡️内置类型也有构造函数 ⚡️2.3 赋值重载operator⚡️2.4 通用迭代器拷贝⚡️2.5 vector(initializer_list<T> il)⚡️…