57,插入区间
题目描述
给你一个 无重叠的 ,按照区间起始端点排序的区间列表。
在列表中插入一个新的区间,你需要确保列表中的区间仍然有序且不重叠(如果有必要的话,可以合并区间)。
示例
输入:intervals = [[1,3],[6,9]], newInterval = [2,5]
输出:[[1,5],[6,9]]
输入: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] 重叠。
题解
思路:
主要的思路是:
判断两个范围数组之间有无交集的情况。
[l1, r1],[l2, r2]
当有交集的时候,就是r1 > l2 或者是 r2 > l1
其他的情况就是没有交集的时候
当有交集的时候,就取两者的并集,让并集去进行下一次循环
如果没有交集就将当前的范围保存下来
最后对数组进行一个排序。
代码:
var insert = function(intervals, newInterval) {
if(intervals.length == 0) return [newInterval]
const res = []
for(let i = 0;i < intervals.length;i++){
// 判断两者有无交集,没有交集就将当前的循环的值保存下来
if(intervals[i][1] < newInterval[0] || newInterval[1] < intervals[i][0]){
res.push(intervals[i])
}else{
// 如果有交集,就取两者的并集并进行重新赋值,进行下一次的循环
newInterval = [Math.min(newInterval[0], intervals[i][0]), Math.max(newInterval[1], intervals[i][1])]
}
}
// 将最后一下的结果保存在res中
res.push(newInterval)
// 对数组按照第一个值进行排序
res.sort((a,b) => a[0] - b[0])
return res
};