【问题标题】:Coderbyte Array Addition Solution -- For Loop with a For LoopCoderbyte 数组加法解决方案——带有 For 循环的 For 循环
【发布时间】:2013-12-27 09:23:55
【问题描述】:

我试图了解数组加法 CoderByte 问题的解决方案中的逻辑。这是问题提示 - “使用 JavaScript 语言,让函数 ArrayAdditionI(arr) 获取存储在 arr 中的数字数组,如果数组中的任何数字组合可以相加等于最大数字,则返回字符串 true在数组中,否则返回字符串 false。例如:如果 arr 包含 [4, 6, 23, 10, 1, 3],则输出应返回 true,因为 4 + 6 + 10 + 3 = 23。数组不会是空,不会包含所有相同的元素,并且可能包含负数。”

这是一个可行的解决方案,但我在 for 循环中迷失了 for 循环。为什么不总是 i = j 的情况,因为 for 循环的计数器都从 0 开始。所以它不总是 0 = 0 吗?

  function ArrayAdditionI(arr) { 
  arr.sort(function(a,b){return a - b})
  var largest = arr.pop();
  var sum = 0;
  for (var i = 0; i < arr.length; i++){
    sum += arr[i];
    for (var j = 0; j < arr.length; j++){
      if (i != j) {
        sum += arr[j];
        if (sum == largest) {
          return true;
        }
      }
    }
    for (var k = 0; k < arr.length; k++) {
      if (i != k) {
        sum -= arr[k];
        if (sum == largest) {
          return true;
        }
      }
    }
    sum = 0;
  }
  // code goes here  
  return false; 

}

谢谢!

【问题讨论】:

  • 完整的j 循环在i 循环的每次迭代中运行。
  • Cuberto,感谢您的回复。我还是迷路了。如果 j 循环正在运行 i 循环的每次迭代,那么行 sum += arr[j] 并不总是有意义 if(i != j) 总是这样吗?
  • 不,并非总是如此。第一次,ij 都为 0。然后i 为 0 但j 为 1。然后i 为 0 但j 为 2。等等...
  • 是的!非常感谢。
  • 但是为什么是'k'循环?很确定没有它也能正常工作,对吧?

标签: javascript arrays for-loop


【解决方案1】:

i_made_that & user3085131:

为了进一步解释 k 循环,它用于按最初添加的顺序回溯并减去数组值,以产生其他方式无法获得的新结果。

如果没有 k 循环,您将无法解决许多潜在的数组(尽管由于缺乏适当的测试,它实际上会通过 coderbyte 测试用例)。

考虑 [1,2,3,98,100]...这应该通过,因为 2+98 = 100。但是它不会没有 k 循环。如果您在没有 k 的情况下记录 sum 的结果,您会看到:

3 (1 + 2)
6 (3 + 3) 
104 (6 + 98) 
3 (2 + 1) 
6 (3 + 3) 
104 (6 + 98) 
4 (3 + 1) 
6 (4 + 2) 
104 (6 + 98) 
99 (98 + 1) 
101 (99 + 2) 
104 (101 + 3) 

然而,使用 k 循环,在 i 的第二次迭代中,它将通过,因为它将从 104 中减去 1,然后从 103 中减去 3 以达到 100。

【讨论】:

    【解决方案2】:

    问题是,您在 for 循环中有 2 个 for 循环,其中带有“i”变量。 变量“i”始终为 0,直到您通过内部的 2 个 for 循环完成迭代。

    for(var i=0){
      
      for(var j=0){}
      
      for(var k=0){}
      
      }

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-27
      • 2021-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-08
      相关资源
      最近更新 更多