JavaScript 查找具有最小平均值的子数组

JavaScript 查找具有最小平均值的子数组

我们要写一个程序,找到具有最小平均值的子数组。为了做到这一点,我们将遍历数组,并跟踪当前子数组及其总和。对于每个元素,我们将计算当前子数组的平均值,并将其与迄今为止看到的最小平均值进行比较。如果更低,我们将更新最小平均值和子数组的起始和结束索引。在迭代结束时,我们将返回具有最小平均值的子数组。

方法

要找到具有最小平均值的子数组,可以按照以下步骤进行:

  • 初始化两个变量start和end,用于跟踪子数组的起始和结束索引。

  • 使用for循环遍历数组,同时跟踪当前总和和迄今为止找到的最小平均值。

  • 在每次迭代时,将当前总和与最小平均值进行比较,并在找到新的最小平均值时更新start和end变量。

  • 如果当前总和大于最小平均值,则将起始索引向前移动,直到总和小于最小平均值为止。

  • 重复步骤2-4,直到到达数组的末尾。

  • 具有最小平均值的子数组是从start开始到end结束的子数组。

示例

给定一个整数数组,找到具有最小平均值的子数组。

以下是使用JavaScript解决这个问题的完整示例代码。

function findsmallestAverageSubarray(arr, k) {
   let minAvg = Number.POSITIVE_INFINITY;
   let minAvgStart = 0;
   let windowSum = 0;
   for (let i = 0; i < arr.length - k + 1; i++) {
      if (i === 0) {
         for (let j = 0; j < k; j++) {
            windowSum += arr[j];
         }
      } else {
         windowSum -= arr[i - 1];
         windowSum += arr[i + k - 1];
      }
      let windowAvg = windowSum / k;
      if (windowAvg < minAvg) {
         minAvg = windowAvg;
         minAvgStart = i;
      }
   }
   return arr.slice(minAvgStart, minAvgStart + k);
}

const arr = [1, 3, 6, -3, -4, 2, 5];
const k = 4;

console.log(findsmallestAverageSubarray(arr, k));

解释:

  • 函数 findSmallestAverageSubarray 接受一个整数数组 arr 和一个整数 k 作为输入,其中 k 是子数组的长度。

  • 该函数返回具有最小平均值的子数组。

  • minAvg 变量被初始化为浮点数的最大可能值。

  • minAvgStart 变量用于存储具有最小平均值的子数组的起始索引。

  • windowSum 变量用于存储当前子数组中元素的总和。

  • 外部循环 for (let i = 0; i < arr.length – k + 1; i++) 用于遍历给定数组 arr 中长度为 k 的所有可能的子数组。

  • 内部循环 for (let j = 0; j < k; j++) 用于计算当前子数组中元素的总和。

  • if (i === 0) 块用于计算第一个子数组中元素的总和。

  • else 块用于计算其余子数组中元素的总和。它减去前一个子数组的第一个元素,并加上当前子数组的最后一个元素。

  • windowAvg 变量用于存储当前子数组的平均值。

  • if (windowAvg < minAvg) 块用于更新最小平均值和具有最小平均值的子数组的起始索引。

  • 最后,该函数返回具有最小平均值的子数组。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程