给定一个由四个元素组成的数组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)
,这种解决方案并不完全正确答案 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;
}
}