【问题标题】:Check multiple arrays for zero sum subquence检查多个数组的零和子序列
【发布时间】:2021-12-29 23:05:21
【问题描述】:

我想检查多个数组的总和是否为零,如果是,则输出是。但只有第一个数组被代码读取。

应该有 3 个输出(真或假),但我只得到 1 个输出

const arr0 = [3];
const arr1 = [4];
const arr2 = [2, 8, -9, 1];    

const arr = [arr0, arr1, arr2];

const zeroSum = arr => {
   const map = new Map();
   let sum = 0;
   for(let i = 0; i < arr.length; i++){
      sum += arr[i];
      if(sum === 0 || map.get(sum)){
         return true;
      };
      map.set(sum, i);
   };
   return false;
};
console.log(zeroSum(arr));

【问题讨论】:

  • 你想要合并在一起的数组的总和,还是只是每个独立数组的总和?
  • 每个独立数组的总和仅@Andy
  • 关键行是sum += arr[i]arr[i] 是一个数组,您正在尝试将其添加到 0。您需要遍历 arr[i] 的元素并将这些元素添加到需要为每个外部循环声明的 sum。
  • @Andy 谢谢,我还在学习数组。到现在我还是没明白。但我会注意你的评论

标签: javascript arrays multidimensional-array checksum


【解决方案1】:
  1. 正如我在评论中提到的 arr[i] 将始终是一个数组。尝试将其添加到 sum 将产生一个字符串。你永远不会得到你想要的结果。要对每个数组的元素求和,您需要一个内部循环来遍历每个元素并将 那些 添加到 sum

  2. 目前您只返回一件事:truefalse。听起来您想要一个数组,将每个总和的结果添加到其中,然后您可以返回它。

  3. 不确定您使用 Map 的目的是什么,因此我已将其从示例中删除。

const arr0 = [3];
const arr1 = [4];
const arr2 = [0];
const arr3 = [2, 8, -9, 1];    

const arr = [arr0, arr1, arr2, arr3];

function zeroSum(arr) {

  // Create an output array
  const out = [];

  // Loop over the arrays
  for (let i = 0; i < arr.length; i++) {

    // Reset the sum for each iteration
    let sum = 0;
    const inner = arr[i];

    // Loop over the elements of each array
    for (let j = 0; j < inner.length; j++) {

     // Add the elements to `sum`
     sum += inner[j];
    }

    // Push either true or false to
    // the output array depending on the
    // result of the condition
    if (sum === 0) {
      out.push(true);
    } else {
      out.push(false);
    }
  }

  // Finally return the array
  return out;
}

console.log(zeroSum(arr));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-06
    • 1970-01-01
    • 2020-09-18
    • 1970-01-01
    • 2012-02-27
    • 2016-04-20
    • 2015-12-10
    相关资源
    最近更新 更多