编写此程序的更好方法,以便它消耗最少的时间来执行
Posted
技术标签:
【中文标题】编写此程序的更好方法,以便它消耗最少的时间来执行【英文标题】:better way to write this program so that it consumes minimum time to execute 【发布时间】:2017-04-09 07:31:42 【问题描述】:我希望以更少的执行时间获得相同的结果。有没有更好的方法来编写代码,以便我可以用最少的执行时间获得相同的结果。
<?php
$input1 = 5;
$input2 = 1;
$input3 = [9, 5, 10];
$numberOfWalls = count($input3);
$numberOfJumps = 0;
for($i=0; $i<$numberOfWalls; $i++)
if($input1 >= $input3[$i])
$numberOfJumps += 1;
else
$tot = 0;
while(1)
if($tot + $input1 < $input3[$i])
$tot = $tot + ($input1 - $input2);
$numberOfJumps += 1;
else
$tot = $tot + $input1;
$numberOfJumps += 1;
break;
echo $numberOfJumps;
【问题讨论】:
如果我们要重写你的代码,我们至少要知道它的目的是什么。输入和输出应该是什么,它做什么,以及为什么。很高兴知道为什么现在需要很长时间,以及您正在寻求什么样的时间减少。大多数时候,最好的建议是:购买速度更快的计算机。 这个程序是在一次编码竞赛中给出的。在这个 $input3 中是一个包含墙壁高度的数组。 Input1 是猴子可以跳的高度, input2 是他无法穿过墙时滑倒的高度。我写了这个程序,我的得分是 100/100,但执行时间是 0.94 秒,最好的结果是 0.14 秒。我很好奇如何以最短的执行时间编写这个程序。 显然最好的方法不是循环,而是用数学方法解决这个小难题。一次跳跃是$input1 - $input2
高,因此您可以计算需要多少次跳跃才能穿过墙壁。 PS:我不会给你100/100的分数。你我找到解决方案的方式同样重要。
【参考方案1】:
这个怎么样:
// input
$forwards = 5;
$backwards = 1;
$walls = [9, 5, 10];
// computation
$oneJump = $forwards-$backwards;
$jumps = 0;
foreach ($walls as $wall) $jumps += ceil(($wall-$backwards)/$oneJump);
// output
echo "Jumps needed = $jumps";
【讨论】:
以上是关于编写此程序的更好方法,以便它消耗最少的时间来执行的主要内容,如果未能解决你的问题,请参考以下文章