Php 计算最大平均块点

Php 计算最大平均块点,php,arrays,algorithm,average,Php,Arrays,Algorithm,Average,我有一个包含30000个整数值的数组,我需要计算最大的60个连续元素块。我已经这样做了,但我不知道是否有更好的方法。现在它花费了大约4秒,加上30000分 $values = array(); $max = 0; for ($i = 0; $i < 30000; $i++) { $values[] = rand(0, 1000); } for ($i = 0; $i < 29940; $i++) { $subValues = array_slice($values

我有一个包含30000个整数值的数组,我需要计算最大的60个连续元素块。我已经这样做了,但我不知道是否有更好的方法。现在它花费了大约4秒,加上30000分

$values = array();
$max = 0;

for ($i = 0; $i < 30000; $i++) {
    $values[] = rand(0, 1000);
}

for ($i = 0; $i < 29940; $i++) {
    $subValues = array_slice($values, $i, 60);
    $sum = array_sum($subValues);
    $avg = $sum / 60;
    $max = ($avg > $max) ? $avg : $max;
}

$maxValues = array_slice($values, $max, 60);
$values=array();
$max=0;
对于($i=0;$i<30000;$i++){
$values[]=兰特(0,1000);
}
对于($i=0;$i<29940;$i++){
$subValues=array_slice($values,$i,60);
$sum=数组_sum($subValues);
$avg=$sum/60;
$max=($avg>$max)?$avg:$max;
}
$maxValues=数组×切片($values,$max,60);

我看到的一个小调整是,您不需要计算平均值。你可以只使用最大的总和。你不需要重复求和;您只需要在遍历数据块时调整边。求[0-59]的和,记录总数和位置0。现在从总数中删除第0个元素并添加第60个元素。如果此数据块的总计较高,则替换存储的总计和位置(1)。然后减去元素1,然后添加元素61等,即重复,直到到达块的末尾。我不是一个php程序员,所以不能真正给出答案,但我认为我的想法是最快的。如果你对最大街区的位置不感兴趣,就放弃这个位置。非常感谢你,芭丝谢芭,它就像一个符咒。从4秒下降到0.02!!!我试了100万个元素0.7秒。。。太好了!!!:D@user2564750你确定?您可以将新代码添加到答案或更新您的密码吗question@Baba这是: