【算法】插入区间
创始人
2024-11-21 03:37:10
0

难度:中等

题目:

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

解题思路:

这道题目的解题思路主要是遍历给定的区间列表,并根据新插入的区间newInterval与当前遍历到的区间的关系,决定如何合并或插入新区间。具体步骤如下:

  1. 初始化:创建一个新的结果数组result,用于存放合并后的区间。
  2. 处理新区间前的区间:遍历区间列表,直到遇到第一个结束点大于等于newInterval的开始点的区间。在此之前的所有区间可以直接加入结果数组,因为它们与newInterval不重叠。
  3. 合并重叠区间:当遇到与newInterval重叠的区间时,更新newInterval的起始和结束点,以覆盖所有重叠的区间。继续遍历,直到不重叠为止。
  4. 将合并后的区间加入结果:将经过更新后的newInterval加入结果数组。
  5. 处理新区间后的区间:将剩余的区间(即结束点小于newInterval结束点的所有区间已处理完毕)直接加入结果数组。
  6. 返回结果:返回合并后的区间列表result。

JavaScript 实现:

function insert(intervals, newInterval) {     const result = [];     let i = 0; // 用于遍历intervals的指针     // 步骤2:处理新区间前的区间     while (i < intervals.length && intervals[i][1] < newInterval[0]) {          result.push(intervals[i]);          i++;     }        // 步骤3:合并重叠区间     while (i < intervals.length && 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.push(newInterval);// 步骤4:将合并后的区间加入结果     // 步骤5:处理新区间后的区间     while(i < intervals.length){        result.push(intervals[i]);        i++;     }     return result; } // 示例 // const intervals = [[1,3],[6,9]]; // const newInterval = [2,5]; // console.log(insert(intervals, newInterval)); // 输出: [[1,5],[6,9]] 

这段代码首先定义了insert函数,它接收一个区间列表intervals和一个新插入的区间newInterval作为参数,然后按照上述步骤处理并返回合并后的区间列表。

相关内容

热门资讯

黑科技线上"德州wp... 黑科技线上"德州wpk辅助是否真实存在"gg扑克软件(切实有挂)-哔哩哔哩1、德州wpk辅助是否真实...
黑科技透明!wepoke真的(... 黑科技透明!wepoke真的(智能ai)太坑了存在有挂(实用技巧黑科技辅助)-哔哩哔哩1、很好的工具...
黑科技脚本!wepoke黑科技... 黑科技脚本!wepoke黑科技功能演示,aapoker有外挂吗,力荐教程(有挂详情)-哔哩哔哩是一款...
黑科技脚本(aapoker辅助... 黑科技脚本(aapoker辅助实际测试)外挂透视辅助神器(透视)一贯真的有挂(黑科技细节)-哔哩哔哩...
黑科技数据"德扑牌型... 黑科技数据"德扑牌型胜率"aapoker辅助工具使用教程(竟然存在有挂)-哔哩哔哩1、许多玩家不知道...
黑科技模拟器!aapoker有... 黑科技模拟器!aapoker有什么规律吗(ai代打)太坑了存在有挂(分享教程黑科技介绍)-哔哩哔哩;...
黑科技透视!微扑克辅助透视技能... 黑科技透视!微扑克辅助透视技能教程,wepoke透明挂辅助,解密教程(有挂攻略)-哔哩哔哩是一款可以...
黑科技实锤(微扑克有辅助挂)外... 黑科技实锤(微扑克有辅助挂)外挂黑科技辅助安装(透视)真是有挂(黑科技方法)-哔哩哔哩1、微扑克有辅...
黑科技实锤"poke... 黑科技实锤"pokerworld下载"wpk ai辅助(果然是有挂)-哔哩哔哩在进入pokerwor...
黑科技神器!wpk辅助哪里买(... 黑科技神器!wpk辅助哪里买(ai代打)太坑了有挂(可靠技巧黑科技解密)-哔哩哔哩1、游戏颠覆性的策...