总和为K的JavaScript Total子数组

我们需要编写一个JavaScript函数,该函数将Numbers数组作为第一个参数,将一个数字作为第二个参数。该函数应查找并返回其总和等于第二个参数指定的数量的连续子数组的总数。

确保数组中的所有数字均为正数。

例如-

如果输入是-

const arr = [1, 1, 1];
const sum = 2;

然后输出应为2,因为此数组中恰好有两个子数组之和为2。

我们将使用滑动窗口算法,该算法使用两指针方法来查找所需的窗口(具有所需总和的子数组)并计算其数量。

示例

const arr = [1, 2, 3, 4, 5];
const sum = 5;
//两个指针的方法来找到一个匹配的子数组
const findOne = (arr, target, start = 0) => {
   let left = start, right = start, sum = 0;
   while(right < arr.length){
      sum += arr[right];
      if(sum === target){
         return true;
      }
      else if(sum < target){
         right++;
      }else{
         left++;
         sum -= left;
         if(left > right){
            right = left;
         };
      };
   };
   return false;
};
//遍历数组以查找所有对数
const findAll = (arr = [], target) => {
   let count = 0;
   for(let i = 0; i < arr.length; i++){
      count += findOne(arr, target, i);
   };
   return count;
};
console.log(findAll(arr, sum));
console.log(findAll([1, 1, 1], 2));

输出结果

控制台中的输出将是-

2
2