Coderbyte数组添加解决方案--For循环与For循环
Coderbyte Array Addition Solution -- For Loop with a For Loop
我正在尝试理解数组添加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){}
}
相关文章:
- 为什么JavaScript在for循环为3时向所有4发出警报
- 另一个ajax调用中的Jquery ajax调用在for循环中没有按预期工作
- 我的javascript for循环不起作用
- For循环冻结Javascript
- 如何在for循环中添加事件侦听器
- 双“for”循环(循环)
- javascript for循环不起作用
- for循环中的javascript if语句找不到==
- Javascript在for循环中等待处理请求
- 我没有'I don’我不理解for在循环中的用途
- 为什么在 Javascript 中使用空的 for 循环 - for(;;).
- 错误后如何停止循环“FOR”
- 如何使用循环 for 与 java 脚本一起检查输入中的值
- 如何正确使用ngRepeat,同时使用循环for
- 是否可以使用循环(for/while)来制作动画?
- 在循环for循环时如何进入和退出
- Javascript原型循环for in数组
- 在对象数组中循环for
- Javascript循环:for循环工作,但不能映射
- 如何创建一个循环"for"在json