我有两组范围,用 [起始值,终止值] 表示。其中一些范围重叠,意味着一个范围的起始位置在另一个范围的 [起始值,终止值] 之间。我想创建一组没有重叠的新范围,同时也不包含任何范围中的新值。
这些范围看起来像这样:
@starts @ends
5 108
5 187
44 187
44 229
44 236
64 236
104 236
580 644
632 770
我期望得到的输出是这样的:
@starts @ends
5 236
580 770
这是因为前七个范围与从5 => 236的区间重叠,而最后两个范围与从632 => 770的区间重叠。
以下是我尝试的代码:
$fix = 0;
foreach (@ends) {
if ($starts[$fix + 1] < $ends[$fix]) {
splice(@ends, $fix, $fix);
splice(@starts, $fix + 1, $fix + 1);
} else {
$fix += 1;
}
}
我可以打印出数值,只需要帮助合并的算法。