如何在列表中找到平均值最高的x个连续数字?

时间:2018-10-23 01:17:26

标签: algorithm

因此,我较早地遇到了这个问题,我很困惑:给定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]

有人知道如何在代码/伪代码中实现这一目标吗?

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