在 JavaScript 中具有所需总和的二进制子数组

问题

我们需要编写一个 JavaScript 函数,它接受一个二进制数组 arr 作为第一个参数,一个数字 target 作为第二个参数。

我们的函数应该计算数组 arr 中存在的子数组的数量,其元素之和等于 count。我们应该最终返回这个计数。

例如,如果函数的输入是

输入

const arr = [1, 0, 1, 0, 1];
const target = 2;

输出

const output = 4;

输出说明

因为所需的子数组是:

[1,0,1][1,0,1,0]
[0,1,0,1]
[1,0,1]

示例

const arr = [1, 0, 1, 0, 1];
const target = 2;
const countSubarrays = (arr = [], target = 1) => {
   const map = {}
   let sum = 0
   let count = 0
   for (const num of arr) {
      map[sum] = (map[sum] || 0) + 1
      sum += num
      count += map[sum - target] || 0
   }
   return count
};
console.log(countSubarrays(arr, target));
输出结果
4