我已经创建了一种方法(基于我在网上找到的伪代码)来计算阵列的前缀平均值,但我不确定我是否满足要求。
要求是:
给定n个数的[1 ... n]数组,计算另一个数组b [1 ... n] 长度为n,使得b [i]是a [0] ... a [i]的平均值,0 <= i <= ñ。
我环顾四周,发现前缀平均方法的线性和二次版本的伪代码,并创建了我自己的每个实现。
以下是线性版本:
public static double[] prefixAverages1 (double[] n) {
double b[] = new double[n.length];
double s = 0;
for (int i = 0; i < n.length; i++) {
s += n[i];
b[i] = s/(i+1);
}
return b;
}
以下是二次版本:
public static double[] prefixAverages2 (double[] n) {
double b[] = new double[n.length];
for (int i = 0; i < n.length; i++) {
double t = 0;
for (int j = 0; j <= i; j++) {
t += n[j];
}
b[i] = t/(i+1);
}
return b;
}
我的问题:
这两个功能是否满足要求?如果是,哪个更好?
答案 0 :(得分:1)
线性更好,因为它需要更少的执行时间 -O(n) 而二次方需要更多时间 - O(n^2)
答案 1 :(得分:0)
是的,我认为这两个功能都满足要求。在这个问题中,我无法找到任何理由选择线性解的二次解。