Gor*_*don 10
你可以用一个 SplMaxHeap
function maxN(array $numbers, $n)
{
$maxHeap = new SplMaxHeap;
foreach($numbers as $number) {
$maxHeap->insert($number);
}
return iterator_to_array(
new LimitIterator($maxHeap, 0, $n)
);
}
Run Code Online (Sandbox Code Playgroud)
用法(演示):
print_r( maxN( array(7,54,2,4,26,7,82,4,34), 4 ) );
Run Code Online (Sandbox Code Playgroud)
你可以试试这个:
$a = array(3,5,6,1,23,6,78,99);
asort($a);
var_dump(array_slice($a, -4));
Run Code Online (Sandbox Code Playgroud)
HTH.
这将在Θ(n)时间内完成:
$a = $b = $c = $d = null;
foreach($array as $v) {
if(!isset($a) || $v > $a) {
$d = $c;
$c = $b;
$b = $a;
$a = $v;
}elseif(!isset($b) || $v > $b) {
$d = $c;
$c = $b;
$b = $v;
}elseif(!isset($c) || $v > $c) {
$d = $c;
$c = $v;
}elseif(!isset($d) || $v > $d) {
$d = $v;
}
}
$result = array($a, $b, $c, $d);
Run Code Online (Sandbox Code Playgroud)