#This returns an error
>>> print(instance.get_first())
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: get_first() takes exactly 1 argument (0 given)
#This works perfectly fine
>>> print(instance.get_first(instance))
1
ArrayAdditionI(arr)获取存储在arr中的数字数组并返回//字符串为true如果数组中的数字组合可以添加//最多等于数组中的最大数字,否则返回//字符串错误。例如:如果arr包含[4,6,23,10,1,3] //输出应返回true,因为4 + 6 + 10 + 3 = 23.数组//不会为空,不包含全部相同的元素,可能包含//负数。 //示例测试用例 //输入:5,7,16,1,2 //输出:&#34; false&#34; // //输入:3,5,-1,8,12 //输出:&#34; true&#34;
Challenge
Using the JavaScript language, have the function
大家好!!! 这个ArrayAdditionI函数的输出应该是true,但由于某些未知的原因,它返回false。但是,我发现它是因为forEach函数,因为当我使用forLoop时,它工作正常。有谁知道为什么每当我使用forEach它给我错误的输出?为什么会这样?
答案 0 :(得分:2)
添加:
var found = false; // <--- new
array.forEach(function(num,idx){
而且:
if(sum === largest){
found = true; // <--- new
}
});
return found; // <--- new
正如@Hamms在评论中所说,return
内的forEach
只会在循环内返回,并且不会返回外部函数ArrayAdditionI
< / p>
JSFiddle:https://jsfiddle.net/f782dcps/
答案 1 :(得分:1)
我的目标是知道如果数组元素的任何总和等于数组中的最大数字。
您可以使用以下方式执行此操作:
function containsSumToMaximum( array ){
array.sort( function(a,b){ return a < b ? -1 : 1; } );
var max = array.pop();
for ( var i = 3; i < 2 << array.length; i++ )
{
var sum = 0,
count = 0;
for ( var j = 0; j < array.length; j++ )
{
if ( i & (2 << j) )
{
sum += array[j];
count++;
}
if ( sum > max )
break;
}
if ( sum == max && count > 1 )
return true;
}
return false;
}
对于n
元素数组,有2^n -1
种方法可以将这些元素中的一个或多个相加。上面的算法只是对所有可能的总和进行强力搜索,并考虑每个总和是否为最大值,并且总和由两个或更多元素组成。