Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 如何找到列表中平均值最高的x个连续数字?_Algorithm - Fatal编程技术网

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

Algorithm 如何找到列表中平均值最高的x个连续数字?,algorithm,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] 有人知道如何在代码/伪代码中实现这一点吗?您正在寻找滑动窗口平均值。基本上,计算x长度的每个可能子数组的平均值。您可以从索引窗口0到(x-1),然后转到1到x,然后再转到2

所以我在前面遇到了这个问题,我被难住了:当给定一个由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]


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

您正在寻找滑动窗口平均值。基本上,计算
x
长度的每个可能子数组的平均值。您可以从索引窗口
0到(x-1)
,然后转到
1到x
,然后再转到
2到(x+1)
,依此类推,计算每个窗口的平均值。如果当前窗口的平均值大于上一个窗口的平均值,则更新您的
max average

您正在寻找滑动窗口平均值。基本上,计算
x
长度的每个可能子数组的平均值。您可以从索引窗口
0到(x-1)
,然后转到
1到x
,然后再转到
2到(x+1)
,依此类推,计算每个窗口的平均值。如果当前窗口的平均值大于上一个窗口的平均值,则更新您的
max average

只要有一个
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;
double sum=0;
对于(int i=0;i
只要有一个滑动窗口
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;
double sum=0;
对于(int i=0;i
@FailedScientist agree,我一开始没有连续记录。可能重复@FailedScientist agree,一开始我没有得到连续的。可能的重复如果我们确定不会遇到数据类型溢出问题,我们可能会计算最大的
x
连续数,而不是每次平均。使用动态规划等方法不是更好地解决吗。?只是好奇@Benman如果我们确定不会溢出问题,是的,每次只计算x个连续数字的和。没关系。问题应该清楚地说明输入包含的最大值是多少。@FailedScientist为什么动态编程更好?你看到有什么子问题可以解决并用来解决更大的问题吗?@有些人我的观点是,如果我们在
x
连续数上有最大和,我们仍然可以通过将其除以for循环外的
x
一次来计算最高平均值。如果我们确定不会遇到数据类型溢出问题,我们可能会我们要计算最大的
x
连续数,而不是每次求平均值。用动态规划等方法解决这个问题不是更好吗。?只是好奇@Benman如果我们确定不会溢出问题,是的,每次只计算x个连续数字的和。没关系。问题应该清楚地说明输入包含的最大值是多少。@FailedScientist为什么动态编程更好?你看到有什么子问题可以解决并用来解决更大的问题吗?@有人说,我的观点是,如果我们在
x
连续数上有最大和,我们仍然可以通过将其除以for循环外的
x
一次来计算最高平均值。