查找数组的前3个子集值


Finding the top 3 subset values of an array

我有一个大约有1000个值的数组,这些值是按日期顺序排列的。

我想找到数据中最大的三个子集。最高和最低当然很容易。我写得很快,所以我知道这不是最好的。

这样做只是为了在一小部分数据样本上进行尝试。这个例子是用PHP编写的。

<?php
$values=array(array (1,1),
array (2,2),array (3,553),array (4,455),array (5,655),array (6,774),
array (7,878),array (8,2359),array (9,0),array (10,56),array (11,756),
array (12,1234),array (13,6),array (14,4),array (15,23),array 
(16,763),array (17,235),array (18,72),array (19,465),array (20,7));
$highest=-1;
$runningtotal=0;
$lowest=1000000000000000;
for ($i=0;$i<18;$i++){
    $runningtotal=$values[$i][1]+$values[$i+1][1]+$values[$i+2][1];
    if ($highest<$runningtotal){$highest=$runningtotal;}
    if ($lowest>$runningtotal){$lowest=$runningtotal;}
}
echo $highest."<br>".$lowest;
?>

如何找到它的前3个子集值?

<?php
$values=array(
array (1,1),
array (2,2),
array (3,553),
array (4,455),
array (5,655),
array (6,774),
array (7,878),
array (8,2359),
array (9,0),
array (10,56),
array (11,756),
array (12,1234),
array (13,6),
array (14,4),
array (15,23),
array (16,763),
array (17,235),
array (18,72),
array (19,465),
array (20,7)
);
$highest=-1;
$runningtotal=0;
$lowest=1000000000000000;
$scores=array(array());
for ($i=0;$i<18;$i++){
    $runningtotal=$values[$i][1]+$values[$i+1][1]+$values[$i+2][1];
    if ($highest<$runningtotal){$highest=$runningtotal;}
    if ($lowest>$runningtotal){$lowest=$runningtotal;}
    $scores[$i][1]=$runningtotal;
    $scores[$i][2]=$values[$i][0];
    $scores[$i][3]=$values[$i+1][0];
    $scores[$i][4]=$values[$i+2][0];
}
rsort($scores);
echo $highest."<br>".$lowest."<br><br>";
for ($i=0;$i<18;$i++){
    echo $scores[$i][1].": ";
    echo $scores[$i][2].",";
    echo $scores[$i][3].",";
    echo $scores[$i][4]."<br>";
}
?>