javascript - Coderbyte 数组相加解决方案——for循环与for循环

标签 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; 

}

谢谢!

最佳答案

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。

关于javascript - Coderbyte 数组相加解决方案——for循环与for循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20484672/

相关文章:

python - 有没有办法缩短 python 中以列表删除或附加项目结尾的多个嵌套 for 和 if 循环?

c - 埃拉托色尼筛法——C语言实现

javascript - 当已选择选择选项时触发 Select2 事件(多选选项)

javascript - 无法通过 JQuery 在 JavaScript 中获取 onChange 事件的元素 id

javascript - 通过导航传递状态时,我的 this.props.navigation.state 未定义?

c - 出现 C 错误 "assignment to expression with array type"

javascript - 如何从字符串中提取纬度和经度值?

arrays - Excel VBA : Displaying Arrays?

c++ - 追加到 std::array

c++ - 是否可以避免 for 循环来计算矩阵条目?