Finding 4 highest values from an array

2019-06-14 04:45发布

问题:

Instead of just 1, how can I pick the 4 highest values from an array using max()?

回答1:

This will do it in Θ(n) time:

$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);


回答2:

You could use an 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)
    );
}

Usage (demo):

print_r( maxN( array(7,54,2,4,26,7,82,4,34), 4 ) );


回答3:

You could try this:

$a = array(3,5,6,1,23,6,78,99);
asort($a);
var_dump(array_slice($a, -4));

HTH.



回答4:

function maxs($ar, $count=4) 
{
    $res = array();

    foreach ($ar as $v) 
    {
        for ($i = 0;$i < $count;$i++) 
        {
            if ($i >= count($res) || $v > $res[$i]) 
            {
                do 
                {
                    $tmp = $res[$i];
                    $res[$i] = $v;
                    $v = $tmp;
                    $i++;
                } 
                while ($i < $count);
                    break;
            }
        }
    }
    return $res;
}


回答5:

A simple method using php predefined functions.

<?php
  $arr = array(6, 8, 3, 2, 7, 9);

  rsort($arr);

  $first = array_shift($arr);
  $second = array_shift($arr);
  $third = array_shift($arr);

  echo $first; // print 9
  echo $second; // print 8
  echo $third; // print 7
?>


回答6:

While storing itself you can maintain another array as soon as the new item is inserted check with the max value in the inner array if the item being inserted is greater insert this item. During the item pop do viceversa. From the inner maintained array you can get as many max numbers as possible.



标签: php arrays max