2 回答

TA贡献1828条经验 获得超3个赞
您的代码会检查折线图中的某处是否存在间隙。
因此,一旦发现间隙,就没有理由在外部 for 循环中继续。考虑一个包含 1000 个值的图表,如果前两个值之间存在差距,则继续检查其他 998 个值是没有意义的。
因此,我建议的第一件事是在开始时设置 $gap = false 并在 $gap 为真时离开循环。你可以这样做
1.) 打破(不那么优雅),
2.) 将您的代码提取到一个方法并添加一个返回语句或
3.) 在 for 循环中添加条件。我不熟悉 php,但在大多数语言中,可以这样做:
$gap = false;
$limit = count($temperatures);
for ($i = 0; $i <= limit && !$gap; $i++) {
[...]
所以一旦 $gap 为真,外部的 for 循环就剩下了。

TA贡献1893条经验 获得超10个赞
向后迭代,记住最后一个有效值并在看到空字符串时将其放入。那么它是 O(n) 最坏的情况,而不是 O(n^2)。
或者,您可以在内循环之后从$y - 1
to $x
(或反之亦然)开始工作,设置间隙数组的值/输出值,然后跳过您刚刚完成的所有值 ( $x = $y
)。这也是 O(n)。
然后,一旦你尽可能快地获得了算法,你就可以放弃 PHP 并用 Rust 或 C 之类的语言编写它。(我不记得该语言中有任何真正的数组,所以它们总是会减缓。)
- 2 回答
- 0 关注
- 204 浏览
添加回答
举报