因此,我较早地遇到了这个问题,我很困惑:给定n个整数的列表时,我们希望返回的值等于该列表中x个连续整数的最高可能平均值。
例如:
我们有列表[1、2、1、7、9、8、3、2]
我们有x = 3
我们的答案将是8,因为3个连续的整数的序列(平均数最高)是7、9、8,而它们的平均值是8。
[1,2,1, 7 , 9 , 8 ,3,2]
有人知道如何在代码/伪代码中实现这一目标吗?
答案 0 :(得分:3)
仅具有x
的滑动窗口并查找最大值。代码中的注释应易于说明。
注意:在添加数字时要小心,它们可能很大,或者您的x
很高,以至于在添加数字后不除以x
就会溢出。因此,每次加和时都除以x
。
double sum = 0;
for ( int i = 0; i < x; i++ ) {
sum += (double) ( arr[i] ) / x; //calculate the average of first `x` numbers, if your input elements are integers you need to cast it to double.
}
double max = sum; //initialize a variable that has that value which you will maximize
for ( int i = x; i < n; i++ ) {
sum -= (double)( arr[i-x] ) / x; //leave the first in the x elements
sum += (double)( arr[i] ) / x; // add the current element so you always compute average of `x` elements.
max = Math.max( max, sum ); //maximize max
}
return max;
答案 1 :(得分:2)
您正在寻找滑动窗口平均值。基本上,您可以计算长度为x
的每个可能子数组的平均值。您将从索引0 to (x-1)
的窗口开始,然后转到1 to x
,然后到2 to (x+1)
,依此类推,计算每个窗口的平均值。如果当前窗口的平均值大于上一个窗口的平均值,则更新max average
。