簡體   English   中英

從數組中找到4個最大值

[英]Finding 4 highest values from an array

如何使用max()從數組中選取4個max() ,而不是僅取1個?

您可以使用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)
    );
}

用法( 演示 ):

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

您可以嘗試以下方法:

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

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

使用php預定義函數的簡單方法。

<?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
?>

在存儲自身時,您可以在插入新項目后立即維護另一個數組,並檢查內部數組中的最大值(如果要插入的項目更大),請插入該項目。 反之亦然。 從內部維護的數組中,您可以獲得盡可能多的最大數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM