如题
我们的程序运行过程中每分钟会采集一个整数的数据指标。
持续采集n分钟就得到一个有n个元素的整数数组a[n]。
现在我们需要一个简单的算法,检测采集到的数据指标中,是否有异常。
异常的检测标准是:如果在连续m分钟内的指标的平均值大于w,则说明有异常。
输入:数组a[n], 正整数m, 整数w
返回:有异常返回 1,没有异常返回 0
例如:对于a={1, 5, 1, 3, 2}, m=2, w=2, 返回:1
附加说明:不同的实现方式执行效率不一样,如果能找到一个很高效的算法就更好了。
$a = [ 1 , 1 , 1 , 1 , 2 , 2 , 3 ]; //一段指标 $m = 3; $w = 2; /* * 根据要求假设我们的m是3,w是2,也就是连续3分钟内的指标数平均值不超过2. * 所以我们要计算的指标数应该是(1,1,1)(1,1,1) (1,1,2) (1,2,2) (2,2,3) 5段 */ echo arr($a,$m,$w); function arr($a=[],$m,$w){ for($i=0; $i<(count($a)-$m+1); $i++){ $b = array_sum(array_slice($a,$i,$m)); if(($b/$m) >$w){ return 1; } } return 0; } //array_slice() 函数在数组中根据条件取出一段值,并返回。 //array_sum() 函数返回数组中所有值的和。