排除最小值和最大值的数组平均值 JavaScript


在这个问题陈述中,我们的任务是利用 Javascript 功能找到数组的平均值,排除数组中的最小值和最大值。这个任务可以通过排除最小值和最大值并计算其余元素的平均值来完成。

给定问题的逻辑

为了创建解决这个问题的程序,我们将使用 Javascript 的 Math 函数,借助 min 和 max 关键字获取最小值和最大值。

获得最小值和最大值后,我们将过滤数组并从数组中排除这些值。然后使用 reduce 方法计算剩余值的平均值。

算法

步骤 1 − 开始时,我们将创建一个函数来计算数组元素的平均值,并将数组传递给它。

步骤 2 − 因为我们需要从数组中排除最小值和最大值。此步骤将找出给定数组的最小和最大项。为了获得这些值,我们将使用 Math 函数和 min 和 max 关键字。

步骤 3 − 获得最小值和最大值后,现在是将它们从数组中排除的时候了,因为我们必须计算数组中剩余项的平均值。为了执行此过程,我们将使用 filter 方法来过滤掉这些元素。

步骤 4 − 由于我们已经排除了数组的最小值和最大值,现在我们将计算数组其余元素的总和。为了对其余项求和,我们将使用 reduce 方法。

步骤 5 − 现在我们有了其余元素的总和,现在将其除以剩余元素的长度以获得它们的平均值。

步骤 6 − 最后,返回其余元素的平均值作为输出。

算法代码

function average(arr) {
   const min = Math.min(...arr);
   const max = Math.max(...arr);
   //filter the input array and exclude min and max values
   const filterArr = arr.filter(x => x !== min && x !== max);
   const sum = filterArr.reduce((acc, val) => acc + val, 0);
   return sum / filterArr.length;
}
const arr = [10, 20, 30, 40, 50];
const avg = average(arr);
console.log(avg);

在上面的代码中,我们使用了一些 Javascript 的内置函数来使代码更简单快捷。借助 Math 函数,我们找到了最小值和最大值。filter 方法将它们从数组中过滤掉。最后,reduce 方法计算其余项的总和。

因此,我们的输出是 30,因为其余元素 20、30、40 的平均值为 30。此处 10 是数组中最小的元素,50 是数组中最大的元素。根据问题陈述,我们排除了这两个元素以获得所需的结果。

复杂度

假设 n 是输入数组的长度,则上面代码的时间复杂度为 O(n)。因为我们多次迭代了所有元素,但每次迭代都是线性时间的。上面代码的空间复杂度为 O(n),因为我们创建了一个新数组来存储过滤后的项。

结论

这就是我们解决上述问题的方法。我们基本上使用了 Javascript 的 reduce 和 Math 函数来获得所需的结果。问题指出我们必须排除最小值和最大值,并显示其余元素的平均值。因此,执行问题所需的时间为 O(n),因为数组中有 n 个项。

更新于:2023年5月18日

635 次浏览

启动您的职业生涯

完成课程后获得认证

开始
广告