LeetCode第57题_插入区间
LeetCode 第57题:插入区间
题目描述
给你一个 无重叠的 ,按照区间起始端点排序的区间列表。在列表中插入一个新的区间,你需要确保列表中的区间仍然有序且不重叠(如果有必要的话,可以合并区间)。
难度
中等
题目链接
点击在LeetCode中查看题目
示例
示例 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] 重叠。
示例 3:
输入:intervals = [], newInterval = [5,7]
输出:[[5,7]]
提示
0 <= intervals.length <= 10^4intervals[i].length == 20 <= intervals[i][0] <= intervals[i][1] <= 10^5intervals根据intervals[i][0]按 升序 排列newInterval.length == 20 <= newInterval[0] <= newInterval[1] <= 10^5
解题思路
一次遍历
这道题是第56题"合并区间"的变体,但不需要对区间进行排序,因为输入已经是有序的。我们只需要找到新区间应该插入的位置,然后处理可能的重叠情况。
关键点:
- 输入区间列表已经按起始位置排序
- 需要处理与新区间的重叠情况
- 一次遍历即可完成插入和合并
- 注意处理边界情况
具体步骤:
- 初始化结果列表
- 遍历原区间列表,分三种情况处理:
- 当前区间在新区间之前(无重叠)
- 当前区间与新区间重叠
- 当前区间在新区间之后(无重叠)
- 根据情况将区间添加到结果列表
图解思路
算法步骤分析表
| 步骤 | 当前区间 | 新区间 | 结果列表 | 说明 |
|---|---|---|---|---|
| 初始 | [1,2] | [4,8] | [[1,2]] | 无重叠,保留当前区间 |
| 第1步 | [3,5] | [4,8] | [[1,2],[3,8]] | 有重叠,合并区间 |
| 第2步 | [6,7] | [3,8] | [[1,2],[3,8]] | 有重叠,继续合并 |
| 第3步 | [8,10] | [3,8] | [[1,2],[3,10]] | 有重叠,继续合并 |
| 第4步 | [12,16] | [3,10] | [[1,2],[3,10],[12,16]] | 无重叠,添加当前区间 |
状态/情况分析表
| 情况 | 输入 | 输出 | 说明 |
|---|---|---|---|
| 空列表 | [], [5,7] | [[5,7]] | 直接返回新区间 |
| 无重叠 | [[1,3],[6,9]], [4,5] | [[1,3],[4,5],[6,9]] | 直接插入新区间 |
| 部分重叠 | [[1,3],[6,9]], [2,5] | [[1,5],[6,9]] | 需要合并重叠区间 |
| 完全重叠 | [[1,5]], [2,3] | [[1,5]] | 新区间被完全包含 |
代码实现
C# 实现
public class Solution {public int[][] Insert(int[][] intervals, int[] newInterval) {var result = new List<int[]>();bool inserted = false;// 处理空数组的情况if (intervals.Length == 0) {return new int[][] { newInterval };}foreach (var interval in intervals) {// 当前区间在新区间之前if (interval[1] < newInterval[0]) {result.Add(interval);}// 当前区间在新区间之后else if (interval[0] > newInterval[1]) {if (!inserted) {result.Add(newInterval);inserted = true;}result.Add(interval);}// 有重叠,合并区间else {newInterval[0] = Math.Min(newInterval[0], interval[0]);newInterval[1] = Math.Max(newInterval[1], interval[1]);}}// 如果新区间还没有插入,将其添加到末尾if (!inserted) {result.Add(newInterval);}return result.ToArray();}
}
C# 执行结果:
- 执行用时:148 ms
- 内存消耗:43.2 MB
Python 实现
class Solution:def insert(self, intervals: List[List[int]], newInterval: List[int]) -> List[List[int]]:result = []i = 0n = len(intervals)# 处理空数组的情况if n == 0:return [newInterval]# 添加所有在新区间之前的区间while i < n and intervals[i][1] < newInterval[0]:result.append(intervals[i])i += 1# 合并重叠的区间while i < n and intervals[i][0] <= newInterval[1]:newInterval[0] = min(newInterval[0], intervals[i][0])newInterval[1] = max(newInterval[1], intervals[i][1])i += 1result.append(newInterval)# 添加所有在新区间之后的区间while i < n:result.append(intervals[i])i += 1return result
Python 执行结果:
- 执行用时:44 ms
- 内存消耗:17.5 MB
C++ 实现
class Solution {
public:vector<vector<int>> insert(vector<vector<int>>& intervals, vector<int>& newInterval) {vector<vector<int>> result;int i = 0;int n = intervals.size();// 处理空数组的情况if (n == 0) {result.push_back(newInterval);return result;}// 添加所有在新区间之前的区间while (i < n && intervals[i][1] < newInterval[0]) {result.push_back(intervals[i]);i++;}// 合并重叠的区间while (i < n && intervals[i][0] <= newInterval[1]) {newInterval[0] = min(newInterval[0], intervals[i][0]);newInterval[1] = max(newInterval[1], intervals[i][1]);i++;}result.push_back(newInterval);// 添加所有在新区间之后的区间while (i < n) {result.push_back(intervals[i]);i++;}return result;}
};
C++ 执行结果:
- 执行用时:12 ms
- 内存消耗:16.9 MB
性能对比
| 语言 | 执行用时 | 内存消耗 | 特点 |
|---|---|---|---|
| C++ | 12 ms | 16.9 MB | 性能最优 |
| Python | 44 ms | 17.5 MB | 代码简洁 |
| C# | 148 ms | 43.2 MB | 可读性好 |
代码亮点
- 🎯 一次遍历完成插入和合并
- 💡 无需额外排序
- 🔍 优雅处理边界情况
- 🎨 代码结构清晰,逻辑简洁
常见错误分析
- 🚫 忘记处理空数组的情况
- 🚫 合并区间时未更新边界
- 🚫 未正确处理新区间的插入位置
- 🚫 重叠判断条件错误
解法对比
| 解法 | 时间复杂度 | 空间复杂度 | 优点 | 缺点 |
|---|---|---|---|---|
| 一次遍历 | O(n) | O(1) | 最优解 | 需要仔细处理边界 |
| 排序后合并 | O(nlogn) | O(1) | 思路简单 | 效率低 |
| 二分查找插入 | O(logn) | O(1) | 查找快 | 实现复杂 |
相关题目
- 合并区间 - 中等
- 会议室 - 简单
- 会议室 II - 中等
- Range 模块 - 困难
相关文章:
LeetCode第57题_插入区间
LeetCode 第57题:插入区间 题目描述 给你一个 无重叠的 ,按照区间起始端点排序的区间列表。在列表中插入一个新的区间,你需要确保列表中的区间仍然有序且不重叠(如果有必要的话,可以合并区间)。 难度 中…...
计算机毕业设计SpringBoot+Vue.js体育馆使用预约平台(源码+文档+PPT+讲解)
温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…...
LeetCode 热题 100_寻找两个正序数组的中位数(68_4_困难_C++)(二分查找)(先合并再挑选中位数;划分数组(二分查找))
LeetCode 热题 100_寻找两个正序数组的中位数(68_4) 题目描述:输入输出样例:题解:解题思路:思路一(先合并再挑选中位数):思路二(划分数组(二分查找…...
MyBatis-Plus 为简化开发而生【核心功能】
文章目录 一、前言二、快速入门1. 入门案例2. 常见注解3. 常见配置 三、核心功能1. 条件构造器2. 自定义 SQL3. Service 接口3.1 基本使用3.2 复杂条件 一、前言 顾名思义,MyBatis-Plus 其实是 MyBatis 的一个加强版,它可以帮助我们快速高效地编写数据库…...
【MySQL】(2) 库的操作
SQL 关键字,大小写不敏感。 一、查询数据库 show databases; 注意加分号,才算一句结束。 二、创建数据库 {} 表示必选项,[] 表示可选项,| 表示任选其一。 示例:建议加上 if not exists 选项。 三、字符集编码和排序…...
通信原理速成笔记(信息论及编码)
信息论基础 信息的定义与度量 信息是用来消除不确定性的内容。例如,在猜硬币正反的情境中,结果存在正反两种不确定性,而得知正确结果能消除这种不确定性,此结果即为信息。单个事件的信息量:对于离散信源中的事件xi&…...
云和恩墨亮相PolarDB开发者大会,与阿里云深化数据库服务合作
2025年2月26日,备受瞩目的阿里云PolarDB开发者大会于北京嘉瑞文化中心盛大举行,众多行业精英齐聚一堂,共襄技术盛会。云和恩墨作为阿里云重要的生态合作伙伴受邀参会。云和恩墨联合创始人兼技术研究院总经理杨廷琨与阿里云智能数据库产品事业…...
kafka consumer 手动 ack
在消费 Kafka 消息时,手动确认(acknowledge)消息的消费,可以通过使用 KafkaConsumer 类中的 commitSync() 或 commitAsync() 方法来实现。这些方法将提交当前偏移量,确保在消费者崩溃时不会重新消费已处理的消息。 以…...
final 关键字在不同上下文中的用法及其名称
1. final 变量 名称:final 变量(常量)。 作用:一旦赋值后,值不能被修改。 分类: final 实例变量:必须在声明时或构造函数中初始化。 final 静态变量:必须在声明时或静态代码块中初…...
PHP面试题--后端部分
本文章持续更新内容 之前没来得及整理时间问题导致每次都得找和重新背 这次整理下也方便各位小伙伴一起更轻松的一起踏入编程之路 欢迎各位关注博主不定期更新各种高质量内容适合小白及其初级水平同学一起学习 一起成为大佬 数组函数有那些 ps:本题挑难的背因为…...
Python 高精度计算利器:decimal 模块详解
Python 高精度计算利器:decimal 模块详解 在 Python 编程中,处理浮点数时,标准的 float 类型往往会因二进制表示的特性而产生精度问题。decimal 模块应运而生,它提供了十进制浮点运算功能,能让开发者在需要高精度计算…...
hbase相关问题处理
1.如果遇到ZK宕机,通过HTable和Connection两种连接方式获取数据,在实现原理和故障恢复上有何异同? 通过new HTable方式,则每次方法调用都会建立新的连接,而且会从zk获取表的元数据,会导致将业务的并发传导到zookeeper服务,会对全局所有依赖zookeeper服务的节点存在一定…...
Linux下的网络通信编程
在不同主机之间,进行进程间的通信。 1解决主机之间硬件的互通 2.解决主机之间软件的互通. 3.IP地址:来区分不同的主机(软件地址) 4.MAC地址:硬件地址 5.端口号:区分同一主机上的不同应用进程 网络协议…...
什么是“零日漏洞”(Zero-Day Vulnerability)?为何这类攻击被视为高风险威胁?
正文 零日漏洞(Zero-Day Vulnerability) 是指软件、硬件或系统中存在的、尚未被开发者发现或修复的安全漏洞。攻击者在开发者意识到漏洞存在之前(即“零日”内)利用该漏洞发起攻击,因此得名。这类漏洞的“零日”特性使…...
AI数据分析:用DeepSeek做数据清洗
在当今数据驱动的时代,数据分析已成为企业和个人决策的重要工具。随着人工智能技术的快速发展,AI 驱动的数据分析工具正在改变我们处理和分析数据的方式。本文将着重介绍如何使用 DeepSeek 进行数据清洗。 数据清洗是数据分析的基础,其目的是…...
把GB型材库放入solidwork中点击库无法应
1、文件夹的位置要选择对,如下图: 2、文件夹一定要嵌套三层,如下图...
【前端】XML,XPATH,与HTML的关系
XML与HTML关系 XML(可扩展标记语言)和 HTML(超文本标记语言)是两种常见的标记语言,但它们有不同的目的和用途。它们都使用类似的标记结构(标签),但在设计上存在一些关键的差异。 XML…...
IP-----动态路由OSPF(2)
这只是IP的其中一块内容,IP还有更多内容可以查看IP专栏,前一章内容为动态路由OSPF ,可通过以下路径查看IP-----动态路由OSPF-CSDN博客,欢迎指正 注意!!!本部分内容较多所以分成了两部分在上一章 5.动态路…...
《HelloGitHub》第 107 期
兴趣是最好的老师,HelloGitHub 让你对编程感兴趣! 简介 HelloGitHub 分享 GitHub 上有趣、入门级的开源项目。 github.com/521xueweihan/HelloGitHub 这里有实战项目、入门教程、黑科技、开源书籍、大厂开源项目等,涵盖多种编程语言 Python、…...
leetcode_字典树 139. 单词拆分
139. 单词拆分 给你一个字符串 s 和一个字符串列表 wordDict 作为字典。如果可以利用字典中出现的一个或多个单词拼接出 s 则返回 true。 注意:不要求字典中出现的单词全部都使用,并且字典中的单词可以重复使用。 思路: 定义状态: 设dp[i]表…...
计算机毕业设计Python+DeepSeek-R1大模型游戏推荐系统 Steam游戏推荐系统 游戏可视化 游戏数据分析(源码+文档+PPT+讲解)
温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…...
网络流算法: Dinic算法
图论相关帖子 基本概念图的表示: 邻接矩阵和邻接表图的遍历: 深度优先与广度优先拓扑排序图的最短路径:Dijkstra算法和Bellman-Ford算法最小生成树二分图多源最短路径强连通分量欧拉回路和汉密尔顿回路网络流算法: Edmonds-Karp算法网络流算法: Dinic算法 环境要求 本文所用…...
【Springboot】解决问题 o.s.web.servlet.PageNotFound : No mapping for *
使用 cursor 进行老项目更新为 springboot 的 web 项目,发生了奇怪的问题,就是 html 文件访问正常,但是静态文件就是 404 检查了各种配置,各种比较,各种调试,最后放弃时候,清理没用的配置文件&…...
Spring Boot 3.x 基于 Redis 实现邮箱验证码认证
文章目录 依赖配置开启 QQ 邮箱 SMTP 服务配置文件代码实现验证码服务邮件服务接口实现执行流程 依赖配置 <dependencies> <!-- Spring Boot Starter Web --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spr…...
PostgreSQL10 物理流复制实战:构建高可用数据库架构!
背景 PostgreSQL 10 在高可用架构中提供了物理复制,也称为流复制(Streaming Replication),用于实现实例级别的数据同步。PostgreSQL 复制机制主要包括物理复制和逻辑复制:物理复制依赖 WAL 日志进行物理块级别的同步&…...
从零开始开发纯血鸿蒙应用之语音朗读
从零开始开发纯血鸿蒙应用 〇、前言一、API 选型1、基本情况2、认识TextToSpeechEngine 二、功能集成实践1、改造右上角菜单2、实现语音播报功能2.1、语音引擎的获取和关闭2.2、设置待播报文本2.3、speak 目标文本2.4、设置语音回调 三、总结 〇、前言 中华汉字洋洋洒洒何其多…...
RabbitMQ系列(五)基本概念之Queue
在 RabbitMQ 中,Queue(队列) 是存储消息的容器,也是消息传递的核心载体。以下是其核心特性与作用的全方位解析: 一、Queue 的定义与核心作用 消息存储容器 Queue 是 RabbitMQ 中实际存储消息的实体,生产者…...
奔图Pantum M7165DN黑白激光打印一体机报数据清除中…维修
故障描述: 一台奔图Pantum M7165DN黑白激光打印一体机开机自检正常,自检过后就不能工作了,按键面板无任何反应一直提示数据清除中…,如果快速操作的话也能按出菜单、功能啥的,不过一会又死机了,故障请看下图: 故障检修: 经分析可能是主板数据出现了问题,看看能不能快速…...
TP-LINK路由器如何设置网段、网关和DHCP服务
目标 ①将路由器的网段由192.168.1.XXX改为192.168.5.XXX ②确认DHCP是启用的,并将DHCP的IP池的范围设置为排除自己要手动指定的IP地址,避免IP冲突。 01-复位路由器 路由器按住复位键10秒以上进行重置操作 02-进入路由器管理界面 电脑连接到路由器&…...
神经网络代码入门解析
神经网络代码入门解析 import torch import matplotlib.pyplot as pltimport randomdef create_data(w, b, data_num): # 数据生成x torch.normal(0, 1, (data_num, len(w)))y torch.matmul(x, w) b # 矩阵相乘再加bnoise torch.normal(0, 0.01, y.shape) # 为y添加噪声…...
