JavaScript 求和为 K 的所有子数组


在本问题陈述中,我们的任务是使用 Javascript 编写获取和为 K 的所有子数组总数的函数。为此,我们将使用 Javascript 的基本功能。

理解问题陈述

问题陈述是创建一个函数,该函数将接收一个整数数组和一个目标和 K。因此,在处理计算后,它将返回数组中和为 K 的子数组的总数。子数组可以定义为数组中连续的一系列项。例如,假设我们有给定的数组 [1, 2, 3, 4, 5] 且 K 为 3,那么有两个和为 3 的子数组,即 [1, 2] 和 [3]。

上述问题的逻辑

为了解决给定的问题,我们可以使用循环遍历数组的项,并且我们还将跟踪到给定点的元素之和。因此,我们可以使用 for 循环来存储和及其频率。我们将检查当前和是否等于 K 的值。如果为真,则将计数值加 1。处理完数组的所有项后,我们将获得形成和为 K 的子数组的总数。

算法

步骤 1:由于我们必须找到和为 K 的子数组的总数,因此为了完成此任务,我们将定义一个名为 subarraysWithSumK 的函数。并在该函数中使用两个参数 arr 和 K。

步骤 2:定义上述函数后,在函数体中,我们将定义一个名为 count 的变量,并将该变量的初始值为零。

步骤 3:因此,借助循环,我们将迭代给定数组以获取数组中项的和。

步骤 4:然后我们将定义一个变量并将其命名为 sum,并将其初始值为零。

步骤 5:之后,我们将使用另一个循环遍历上述循环的项。并且在这个循环中,我们将对每个项求和并将结果存储在 sum 变量中。

步骤 6:然后我们将检查条件,即 sum 的值是否等于 K 的值,如果是,则将 count 值加 1。

示例

function subarraysWithSumK(arr, K) {
   let count = 0;
   for (let i = 0; i < arr.length; i++) {
      let sum = 0;
      for (let j = i; j < arr.length; j++) {
         sum += arr[j];
         if (sum === K) {
            count++;
         }
      }
   }
    return count;
}
 
const arr = [1, 2, 3, 4, 5];
const K = 6;
console.log(subarraysWithSumK(arr, K));

输出

1

复杂度

查找和为 K 的子数组总数的算法需要 O(n) 时间,其中 n 是数组中的项数。此代码使用恒定量的时间来处理数组中的每个项。程序的空间复杂度为 O(1)。

结论

这就是我们解决上述问题陈述的方式。我们已经实现了获取和为 K 的子数组计数的代码。它跟踪数组项并检查和是否等于 K。

更新于: 2023 年 8 月 14 日

333 次浏览

开启你的 职业生涯

完成课程获得认证

开始学习
广告