我有一个大约有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个子集值?
答案 0 :(得分:0)
<?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>";
}
?>