Coderbyte数组添加解决方案--For循环与For循环

Coderbyte Array Addition Solution -- For Loop with a For Loop

本文关键字:循环 For --For 解决方案 数组 添加 Coderbyte      更新时间:2024-05-19

我正在尝试理解数组添加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; 
}

谢谢!

i_made_hat&user3085131:

为了进一步解释k循环,它用于按数组值最初相加的顺序进行反求和相减,以产生无法获得的新结果。

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

考虑[1,2,3,98100]。。。这应该通过,因为2+98=100。然而,如果没有k循环,它也不会。如果你记录没有k的和的结果,你会看到:

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。

问题是,在带有"i"变量的for循环中,有两个for的循环。变量"i"总是为0,直到您完成对内部循环的2次迭代。

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