【发布时间】:2019-11-05 10:57:12
【问题描述】:
假设您有一个变量 $n 表示时间线上的多个分区,以及一个可变长度的间隔数组:
$n = 10;
$intervals = [
[1, 2],
[2, 2],
[5, 6],
[8, 10],
];
问题是在时间轴上找到这些间隔之间的最大差距。对于上述问题,我们有两个长度为 2 和 1 的间隙,所以答案应该是 2。为了更好地可视化它:
我的直截了当的方法效率不高...
- 初始化一个长度为 $n 的空时间线数组,其中每个元素设置为“E”,如空。
- Foreach 在每个间隔上循环,并从间隔开始到间隔结束创建另一个 for 循环,并将时间线数组中的这些元素设置为“T”。
- 遍历时间线数组并启动一个 $counter
我可以做哪些改进?
请注意:
- 间隔始终根据其起始位置进行排序。
- 间隔不必从时间线的开头开始,也不必在时间线的末尾结束。因此,在第一个间隔之前可能会有一个间隙,在最后一个间隔之后可能会有一个间隙。
- 间隔可以重叠。所以简单地计算下一个间隔的开始减去这个间隔的结束是行不通的......考虑这个例子:[1,5] [2,4] [6,10] [6,8]
【问题讨论】:
-
您的
$intervals是否总是按顺序排列? -
@NickParsons 谢谢,是的,我的意思是 2 和 1。区间总是按其起始位置排序。
标签: php arrays algorithm logic