.
2020-02-11 吴亲库里 库里的深夜食堂
在给定的一组不重叠的区间中,插入一个新的区间(必要时需要合并区间)。

可以先看看两个 demo 中的案例。我们可以对原区间进行遍历,只有两种情况,要么加上 newInterval 区间后重叠了,要么不重叠,如果不重叠就好处理了,即在对应的区间位置加入一个未重叠的新区间。如果重叠了,因为可能包含了好几个重叠的区间,那就需要确定重叠的总区间,然后取相应的最小值和最大值组成新的区间。具体看代码
/**
* @param Integer[][] $intervals
* @param Integer[] $newInterval
* @return Integer[][]
*/
function insert($intervals, $newInterval) {
$res=[]; //最后结果
$n=count($intervals);
$cur=0; //记录位置
//未重叠
while($cur<$n && $intervals[$cur][1]<$newInterval[0]){
$res[]=$intervals[$cur++];
}
while($cur<$n && $intervals[$cur][0] <=$newInterval[1]){
$newInterval[0]=min($intervals[$cur][0],$newInterval[0]);
$newInterval[1]=max($intervals[$cur][1],$newInterval[1]);
++$cur;
}
$res[]=$newInterval;
//补上后面的区间
while($cur<$n){
$res[]=$intervals[$cur++];
}
return $res;
}
