【算法】插入区间
创始人
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作为参数,然后按照上述步骤处理并返回合并后的区间列表。

相关内容

热门资讯

2分钟技巧!wepoker有有... 您好,wepoker这款游戏可以开挂的,确实是有挂的,需要了解加微【485275054】很多玩家在这...
揭秘!WEPoker辅助透视助... 您好,wepoker这款游戏可以开挂的,确实是有挂的,需要了解加微【485275054】很多玩家在这...
五分钟代打!壹起跑得快辅助软件... 五分钟代打!壹起跑得快辅助软件,太夸张了外挂透明挂辅助挂,详细教程(有挂推荐);壹起跑得快辅助软件最...
2分钟细说"德州哪里... 您好,wpk代打这款游戏可以开挂的,确实是有挂的,需要了解加微【136704302】很多玩家在这款游...
十分钟辅助挂!德扑之星系统发牌... 您好,wpk机制这款游戏可以开挂的,确实是有挂的,需要了解加微【485275054】很多玩家在这款游...
二分钟机制!wepoker好友... 您好,wepoker这款游戏可以开挂的,确实是有挂的,需要了解加微【757446909】很多玩家在这...
一分钟揭秘!(边锋斗地主)外挂... 相信很多朋友都在电脑上玩过边锋斗地主吧,但是很多朋友都在抱怨用电脑玩起来不方便。为此小编给大家带来了...
专业讨论代打!胡乐麻将辅牌器,... 《专业讨论代打!胡乐麻将辅牌器,太夸张了外挂透明挂辅助挂,详细教程(有挂奋斗)》 胡乐麻将辅牌器软件...
3分钟输赢!wepoker私局... 3分钟输赢!wepoker私局代打(辅助透视),wEPOKEr有辅助其实真的是有挂,透明挂教程(有挂...
必看攻略"拱趴大菠萝... 您好,Wepoke专用这款游戏可以开挂的,确实是有挂的,需要了解加微【136704302】很多玩家在...