Coderbyte数组加法解决方案 - 用于带有For循环的循环

时间:2013-12-10 02:04:25

标签: javascript arrays for-loop

我正在尝试理解Array Addition 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; 

}

谢谢!

2 个答案:

答案 0 :(得分:0)

i_made_that&amp; 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。

答案 1 :(得分:0)

问题是, for 循环中有2个 循环,其中&#34; i&#34;变量。 变量&#34; i&#34;总是会变为0,直到你完成迭代到内部的2 for循环。

&#13;
&#13;
for(var i=0){
  
  for(var j=0){}
  
  for(var k=0){}
  
  }
&#13;
&#13;
&#13;