如何在数组中查找其值与平均值最大的元素

时间:2017-03-07 00:57:18

标签: php

给定一个由四个元素组成的数组A:

(9 + 4 + (−3) + (−10)) / 4 = 0

此数组的平均值为A[2]

元素|(-3) - 0| = |0 - (-3)| = 3的偏差为A[3]

元素<?php $array = array(9, 4, -3, -10); $rslt = soln($array); function soln($A){ $avg = array_sum($A)/count($A); $eE = 0; for($i = 0; $i < count($A); $i++){ if (abs($avg - $A[$i]) > $eE): $eE = $i; endif; } if ( (int)$eE > 100000000 ) { return -1; } else { return (int)$eE; } } 的偏差为10.它是数组A的极值元素,因为没有其他元素的偏差大于10.

此阵列中没有其他极端元素。

我有以下解决方案:

botframework-emulator.app/Contents/Resources/app/app/server/botFrameworkService.js

但基于O(N)和O(l)

,这种解决方案并不完全正确

1 个答案:

答案 0 :(得分:0)

平均值中最远的元素将是MAX或MIN元素之一。所以你需要的是在与计算数组和相同的周期中找到MAX和MIN元素。然后,您将找到基于数组总和和数组中元素数量的平均值(就像您一样)。然后你只检查两个元素,MAX和MIN--它们中的哪一个最远。

代码示例:

function soln($arr){
  $sum = 0;

  $max = PHP_INT_MIN;
  $min = PHP_INT_MAX;

  foreach($arr as $el){
    if($el > $max){
      $max = $el;
    }

    if($el < $min){
      $min = $el;
    }

    $sum = $sum + $el;
  }

  $avg = $sum/count($arr);

  if(abs($avg - $min) > abs($avg - $max)){
    return $min;
  }else{
    return $max;
  }
}