san*_*ows 5 php arrays algorithm logic
想象一下,您有一个变量 $n 表示时间线上的多个分区,以及一个可变长度的间隔数组:
$n = 10;
$intervals = [
[1, 2],
[2, 2],
[5, 6],
[8, 10],
];
Run Code Online (Sandbox Code Playgroud)
问题是在时间轴上找到这些间隔之间的最大差距。对于上面的问题,我们有两个长度为 2 和 1 的间隙,所以答案应该是 2。 为了更好地可视化它:
我的直接方法效率不高......
我可以做哪些改进?
请注意:
<?php
$n = 10;
$intervals = [
[1, 2],
[2, 2],
[5, 6],
[8, 10]
];
$non_overlapping = [];
$start = -1;
$end = -1;
foreach($intervals as $index => $interval){
if($start == -1) $start = $interval[0];
if($end == -1) $end = $interval[1];
if($index == 0) continue; // since it's first index
if($interval[0] >= $end){
$non_overlapping[] = [$start,$end];
$start = $interval[0];
$end = $interval[1];
}else{
$end = max($end,$interval[1]);
}
}
$non_overlapping[] = [$start,$end];
$maximum_gap = 0;
$prev_end = 0;
foreach($non_overlapping as $index => $interval){
$maximum_gap = max($maximum_gap,$interval[0] - $prev_end - 1);
$prev_end = $interval[1];
}
$maximum_gap = max($maximum_gap,$n - $prev_end);
echo $maximum_gap;
Run Code Online (Sandbox Code Playgroud)
$n
自身相减,并找到最大差距。