JavaScript 中数组中 n 个连续元素的最大和

javascriptweb developmentfront end technologyobject oriented programming更新于 2024/12/9 22:36:17

在给定的问题陈述中,我们的目标是借助 Javascript 功能找到数组中 n 个连续项的最大和。因此,为了解决这个问题,我们将使用基本的 Javascript 功能并产生最大和。

理解问题

手头的问题是找到数组中 n 个连续项的最大和。此过程将涉及在给定数组中识别具有最高可能和的长度为 n 的连续子数组。例如,假设我们有一个数组 [1, 2, 4, 7, 3, 5],如果 n 的值为 2,那么 2 个连续项为 4、7,最大和为 11。

给定问题的逻辑

为了解决给定的问题,我们将使用一个函数来完成这项任务。函数将在数组开头初始化左右两个指针。之后,我们将右指针移向右侧位置,并跟踪窗口内当前项的总和。现在,我们将检查条件,看看窗口的大小是否大于 n,因此我们将从当前总和中减去左指针处项的值。然后,我们将左指针移到右侧。这样,我们将始终保持窗口大小为 n,并根据条件更新最大总和。

算法

步骤 1:因为我们必须找到数组中 n 个连续项的最大总和,所以为了完成此任务,我们将创建一个函数并将其命名为 maxSumOfNElements。此函数接受两个参数:第一个是数组 arr,第二个是数字 n。

步骤 2:因此,在上面的函数中,我们将首先检查 n 的值是否大于数组的长度。如果条件为真,则返回值为 null,因为它不是有效输入。

步骤 3:验证上述条件后,我们将两个变量 maxSum 和 currentSum 初始化为零。maxSum 将存储连续元素的最大和,currentSum 将存储 n 个连续项的运行和。

步骤 4:我们已经声明了将在这些步骤中使用的变量。现在我们将计算数组中前 n 个项目的初始总和,并将其保存在 maxSum 和 currentSum 变量中。

步骤 5:此步骤将借助 for 循环从索引 n 开始迭代数组。

步骤 6:在循环中,我们将添加当前项目并从 currentSum 中减去后面 n 个位置的项目。

步骤 7:现在我们将使用 maxSum 和 currentSum 之间的最大值更新 maxSum。

步骤 8:完成循环后,我们将返回数组中 n 个连续项目的最大总和。

示例

//查找最大总和的函数
function maxSumOfNElements(arr, n) {
	if (n > arr.length) {
		return null; // 输入无效,因为 n 大于数组大小
   	}

   let maxSum = 0;
   let currentSum = 0;

   for (let i = 0; i < n; i++) {
      maxSum += arr[i];
   }
   currentSum = maxSum;

   for (let i = n; i < arr.length; i++) {
      currentSum += arr[i] - arr[i - n];
      maxSum = Math.max(maxSum, currentSum);
   }

   return maxSum;
}

const arr = [1, 3, 5, 2, 4, 6, 8];
const n = 3;
const result = maxSumOfNElements(arr, n);
console.log("Maximum sum of", n, "consecutive items:", result);

输出

Maximum sum of 3 consecutive items: 18

复杂度

计算数组中 n 个连续项的最大和的时间复杂度为 O(n),其中 n 是数组的长度。因为我们只对数组进行了一次迭代。上述代码的空间复杂度为 O(1),因为我们只使用了恒定量的空间来存储变量。

结论

我们有效地找到了数组中 n 个连续项的最大和。此方法用于以线性时间复杂度解决问题,对于大型数组来说是一种有效的解决方案。


相关文章


有用资源