Leetcode 57-插入区间

news/2025/3/6 16:33:30/

给你一个 无重叠的 ,按照区间起始端点排序的区间列表 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]]
示例 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] 重叠。

提示:

0 <= intervals.length <= 104
intervals[i].length == 2
0 <= starti <= endi <= 105
intervals 根据 starti 按 升序 排列
newInterval.length == 2
0 <= start <= end <= 105

题解

本题已经排序,所以无需排序

令start=newInterval[0],end=newInterval[1];
一开始考虑几种重叠的可能性
start<starti&&end>endi(全包住)
start>starti&&start<endi(左侧相交)
start>starti&&end>endi(被包住)
end>start&&end<endi(右侧相交)

这样思考太麻烦了,可以考虑什么情况相离,相交的循环合并,相离的直接加入数组:

1.把左侧相离(intervals[i][1] < start)的数组直接加入数组
2.相交(intervals[i][0]<end)的合并
3.再把右侧相离的数组加入新数组

图片转载自笨猪爆破组
三个区域示意图:
不重叠的绿区间,在蓝区间的左边
有重叠的绿区间
不重叠的绿区间,在蓝区间的右边
在这里插入图片描述

class Solution {public int[][] insert(int[][] intervals, int[] newInterval) {int start=newInterval[0];int end=newInterval[1];List<int[]> res=new ArrayList<>();//1.左侧相离int i=0;while (i < intervals.length && intervals[i][1] < start) {res.add(intervals[i++]);}//2.相交while(i<intervals.length&&intervals[i][0]<=end){//这样比是错误的:int min=Math.min(intervals[i][0],start)start=Math.min(intervals[i][0],start);end=Math.max(intervals[i][1],end);i++;}res.add(new int[]{start,end});//3.右侧相离while(i<intervals.length){res.add(intervals[i++]);}return res.toArray(new int[res.size()][]);}
}

http://www.ppmy.cn/news/1577109.html

相关文章

1、语言的本质

语言的本质 1.1 语言的产生生物重演律 1.2 语言的本质1.3 语系1.4 文字的起源汉字的构成和使用 后记 语言是人类传递信息的工具&#xff0c;其本质是信息的载体。 语音和文字是构成语言的两个基本属性&#xff0c;语音是语言承载的物理信号&#xff0c;文字是记录语言的逻辑符…

基于编译器特性浅析C++程序性能优化

最近在恶补计算机基础知识&#xff0c;学到CSAPP第五章的内容&#xff0c;在这里总结并且展开一下C程序性能优化相关的内容。 衡量程序性能的方式 一般而言&#xff0c;程序的性能可以用CPE&#xff08;Cycles Per Element&#xff09;来衡量&#xff0c;其指的是处理每个元素…

alloc、malloc 与 allocator:内存管理三剑客

内存管理是C语言开发者的核心能力&#xff0c;也是系统级编程的基石。 一、内存分配三剑客&#xff1a;malloc/calloc/realloc 1. malloc函数原理 int* arr (int*)malloc(5 * sizeof(int)); // 分配20字节空间&#xff08;假设int为4字节&#xff09; 从堆区分配指定字节的连…

文本处理Bert面试内容整理-BERT的输入格式是什么?

BERT的输入格式由几个部分组成,以便模型能够有效地处理输入数据。每个输入示例包含了必要的标记、位置编码和注意力掩码。具体来说,BERT的输入格式包含以下几个组件: 1. Token IDs BERT使用WordPiece分词器将输入文本拆分为Token,并将每个Token映射为一个整数ID。WordPiece…

Android OpenCV开发详细指南

如何在Android上使用OpenCV进行开发&#xff0c;需要详细的说明。首先&#xff0c;我需要确定用户的基础&#xff0c;可能是一个有一定Android开发经验的开发者&#xff0c;但对OpenCV不太熟悉。可能需要从环境搭建开始&#xff0c;到基础功能实现&#xff0c;再到高级应用的全…

Linux网络 NAT、代理服务、内网穿透

NAT 技术 IPv4 协议中存在 IP 地址数量不充足的问题&#xff0c;而 NAT 技术是当前解决 IP 地址不够用的主要手段 , 是路由器的一个重要功能。NAT 能够将私有 IP 对外通信时转为全局 IP&#xff0c;也就是就是一种将私有 IP 和全局 IP 相互转化的技术方法。 这可以让很多学…

Java后端高频面经——Mysql

3. Mysql(21) 第三范式的作用与原理&#xff1f;&#xff08;B站&#xff09; 数据库范式有 3 种&#xff1a; 1NF(第一范式)&#xff1a;属性不可再分。 1NF 是所有关系型数据库的最基本要求 &#xff0c;也就是说关系型数据库中创建的表一定满足第一范式。 2NF(第二范式)&am…

Vue 监听器的魔法之旅:@Watch(‘form.productId’) vs @Watch(‘value’) 大揭秘!✨

以下是一篇技术博客&#xff0c;主题围绕 Watch(form.productId) 和 Watch(value) 这两个 watcher 的功能、区别及使用场景&#xff0c;基于 compare-form.vue 的代码。准备好一起探索 Vue 监听器的魔法了吗&#xff1f;&#x1f604; &#x1f604; Vue 监听器的魔法之旅&…