Coderbyte上的数组添加JavaScript函数
我正在对Coderbyte进行挑战,如能就我的问题提供任何建议,我将不胜感激: 给我的挑战是: 使用JavaScript语言,具有函数ArrayAdditionI(arr) 获取存储在arr中的数字数组,如果为true,则返回字符串 数组中的任何数字组合都可以加起来等于 数组中的最大数字,否则返回字符串false。 例如:如果arr包含[4,6,23,10,1,3],则输出应 返回true,因为4+6+10+3=23。数组不会为空, 不会包含所有相同的元素,并且可能包含负数。“ 我试图解决它的方式:Coderbyte上的数组添加JavaScript函数,javascript,arrays,Javascript,Arrays,我正在对Coderbyte进行挑战,如能就我的问题提供任何建议,我将不胜感激: 给我的挑战是: 使用JavaScript语言,具有函数ArrayAdditionI(arr) 获取存储在arr中的数字数组,如果为true,则返回字符串 数组中的任何数字组合都可以加起来等于 数组中的最大数字,否则返回字符串false。 例如:如果arr包含[4,6,23,10,1,3],则输出应 返回true,因为4+6+10+3=23。数组不会为空, 不会包含所有相同的元素,并且可能包含负数。“ 我试图解决它的方
函数数组添加(arr){
var newArr=arr.sort();//从最小到最大排序。
var largestNum=newArr.slice(-1);//获取最后一个数字,它将是最大的。
var loopArr=arr.sort().pop();//取出最大数字,以便以后添加。
var结果=0;
对于(var i=0;i使用
arr.sort(function (a, b) { return a - b })
使用
arr.sort(function (a, b) { return a - b })
这可能还不是完整的解决方案,但以下是JavaScript问题:
largestNum
是您算法中的一个数组
.sort()
不起作用
function ArrayAdditionI(arr){
var largestNum = Math.max.apply(0, arr); // Gets the last number, which would be the largest.
arr.sort(function(a, b){return a-b})
arr.pop(); // Takes out the largest number for adding later.
var result=0;
如果(result!==largestNum){
,除法代价很高,可能会对浮点数产生意外的结果,也可以使用
这就是你的JavaScript。但我很确定算法是错误的——但我认为这取决于你
请注意,示例[4,6,23,10,1,3]=>4+6+10+3=23
不仅仅是将最小值与最大值相加以尝试匹配它。这可能还不是完整的解决方案,但下面是JavaScript问题:
largestNum
是您算法中的一个数组
.sort()
不起作用
function ArrayAdditionI(arr){
var largestNum = Math.max.apply(0, arr); // Gets the last number, which would be the largest.
arr.sort(function(a, b){return a-b})
arr.pop(); // Takes out the largest number for adding later.
var result=0;
如果(result!==largestNum){
,除法代价很高,可能会对浮点数产生意外的结果,也可以使用
这就是你的JavaScript。但我很确定算法是错误的——但我认为这取决于你
请注意,示例[4,6,23,10,1,3]=>4+6+10+3=23
不仅仅是将最小值与最大值相加以尝试匹配它。这是一个可能的问题解决方案示例
工作原理:
- 首先对所有项目进行降序排序
- 将第一个元素移到
最大值
- 调用递归函数
y
,使用缩减数组、最大值和一个变量,该变量为成功添加的项保留空数组
递归函数基本上分为两部分
测试剩余和是否为零,如果为零,则得到结果并返回true
,从而完成函数
如果不是,则遍历数组并
- 从阵列中复制一个副本
- 使用
接头
- 测试,如果该值小于或等于剩余值和调用
y
的结果,则使用短数组,求和负值,并使用已用项目和acual项目创建一个新数组
- 如果为true,则返回true并完成该函数
如果在返回之前未完成false
函数x(数组){
函数y(a、s、结果){
var aa,i,v;
如果(s==0){
document.write('result:'+JSON.stringify(result,0,4)+'');
返回true;
}
对于(i=0;i if(v问题解决方案的可能示例
工作原理:
- 首先对所有项目进行降序排序
- 将第一个元素移到
最大值
- 调用递归函数
y
,使用缩减数组、最大值和一个变量,该变量为成功添加的项保留空数组
递归函数基本上分为两部分
测试剩余和是否为零,如果为零,则得到结果并返回true
,从而完成函数
如果不是,则遍历数组并
- 从阵列中复制一个副本
- 使用
接头
- 测试,如果该值小于或等于剩余值和调用
y
的结果,则使用短数组,求和负值,并使用已用项目和acual项目创建一个新数组
- 如果为true,则返回true并完成该函数
如果在返回之前未完成false
函数x(数组){
函数y(a、s、结果){
var aa,i,v;
如果(s==0){
document.write('result:'+JSON.stringify(result,0,4)+'');
返回true;
}
对于(i=0;i if(v我曾试图用for循环解决这个问题,但我忽略了一个事实,即挑战
不是要求所有的数字加起来等于最大的数字,但也可以
如果我们去掉一些数字,加起来就是最大的数值。因此我决定用递归来解决
提示:
*Math.max.apply()方法接受一个数组并返回最大的数字。请注意,它通常作为Math.max()处理字符串。
*sort()方法可以使用一个参数来进一步扩展它的用途
对字符串进行排序,但为了对数字进行排序,我们包含了一个函数,用于查找哪个数字更大。
*首先获取最大的数字。
*对数组进行排序,并删除以后用于递归的最大数字。
*创建一个递归函数,检查这些数字的总和是否为最大值,如果不是,则检查该值