JavaScript 中至少包含两个元素的子数组总和

javascriptweb developmentfront end technology

问题

我们需要编写一个 JavaScript 函数,该函数接受一个整数数组 arr 作为第一个参数,接受一个整数 target 作为第二个和第一个参数。我们的函数应该检查是否存在一个大小至少为 2 的连续子数组,其总和为 k 的倍数,即总和为 n*k,其中 n 可以是任何整数。

如果存在,则返回 true,否则返回 false。

例如,如果函数的输入是 −

const arr = [23, 2, 6, 4, 7];
const target = 6;

那么输出应该是 −

const output = true;

输出解释:

因为 [23, 2, 6, 4, 7] 是一个大小为 5 的连续子数组,总和为 42。

示例

其代码为 −

const arr = [23, 2, 6, 4, 7];
const target = 6;
const checkSubarraySum = (arr = [], target = 1) => {
   let sum = 0
   const hash = {}
   hash[0] = -1;
   for (let i = 0; i<arr.length; i++) {
      sum += arr[i]
      if (target!=0) sum %= target
      if ( hash[sum] !== undefined ) {
         if(i-hash[sum]>1) return true
      } else {
         hash[sum] = i
      }
   };
   return false;
};
console.log(checkSubarraySum(arr, target));

输出

控制台中的输出将是 −

true

相关文章