Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 查找数组中的一个或多个数字加起来是否等于某个数字_Javascript_Algorithm_Loops - Fatal编程技术网

Javascript 查找数组中的一个或多个数字加起来是否等于某个数字

Javascript 查找数组中的一个或多个数字加起来是否等于某个数字,javascript,algorithm,loops,Javascript,Algorithm,Loops,假设我有一个像9这样的集合数和一个有s[1,2,4,6,3,9]的数组。我想知道什么是最好的循环方法,看看这些s中的一个或多个加起来是否可以达到9。我最初的想法是: 检查当前数组索引值是否等于magicNum 如果当前数字小于magicNum,将其与数组中的另一个数字相加,并继续循环以查看是否匹配 如果上述操作无效,请转到下一个数字并重复。 我第一张支票还行,但另外两张支票我有麻烦。我知道,对于初学者来说,除了使用reduce之外,还可能需要或不需要递归函数。算法还不是我的强项,但我渴望并且非常

假设我有一个像9这样的集合数和一个有s[1,2,4,6,3,9]的数组。我想知道什么是最好的循环方法,看看这些s中的一个或多个加起来是否可以达到9。我最初的想法是:

检查当前数组索引值是否等于magicNum 如果当前数字小于magicNum,将其与数组中的另一个数字相加,并继续循环以查看是否匹配 如果上述操作无效,请转到下一个数字并重复。 我第一张支票还行,但另外两张支票我有麻烦。我知道,对于初学者来说,除了使用reduce之外,还可能需要或不需要递归函数。算法还不是我的强项,但我渴望并且非常愿意改进。任何类型的指导都将不胜感激

常数magicNum=9; 常数arr=[10,1,2,4,6,3]; 对于let i=0,arrLength=arr.length;i<长度;i++{ 如果arr[i]==magicNum{ console.log'Number Found!'; 持续 }否则,如果arr[i]>magicNum{ 持续 }否则,如果arr[i]} 您可以采用迭代和递归的方法来查找子集和

函数getSubsetsarray,sum{ 函数i=0,s=0,t=[]{ 如果s==和{ 结果:pusht; 回来 } 如果i==array.length{ 回来 }
如果s+array[i]这更像是一个动态规划问题。 您可以参考以下内容来实现此目的:

实际上,您需要列出数组的所有子集,这些子集的数字之和等于给定的幻数

编辑: 副本

在上面的帖子中发布@Redu的答案:

function getSummingItems(a,t){
  return a.reduce((h,n) => Object.keys(h)
                                 .reduceRight((m,k) => +k+n <= t ? (m[+k+n] = m[+k+n] ? m[+k+n].concat(m[k].map(sa => sa.concat(n)))
                                                                                      : m[k].map(sa => sa.concat(n)),m)
                                                                 :  m, h), {0:[[]]})[t];
}
var arr = Array(20).fill().map((_,i) => i+1), // [1,2,..,20]
    tgt = 9,
    res = [];

console.time("test");
res = getSummingItems(arr,tgt);
console.timeEnd("test");
console.log("found",res.length,"subsequences summing to",tgt);
console.log(JSON.stringify(res));

第二个条件还不清楚,你希望得到什么?你的意思是,如果它更少,未来的迭代也会尝试找到magicNum+,而不仅仅是magicNum?9是神奇的数字吗?什么是神奇的数字?如果你寻找一个数字,它与添加一些数字有什么关系,它可能在数组中多于一个。如果不是在数组的末尾?请添加缺少9的第二个结果。为什么不直接使用.includes?不需要编写自己的函数1.在使用else if语句时不需要“continue”。2.您可以显示一个测试用例吗?发生了什么事?问题不太清楚。您应该把它放在您的问题中-就目前的情况而言,这是非常简单的不清楚您的解决方案将只列出“对”。在数组中实现幻数的可能性更大。基本上需要数组的子集,其中一些条目等于幻数。他只是回答@CertainPerformance,并说:@CertainPerformance问题是我还需要知道ar中是否有两个或更多的s雷加起来等于9.-卡尔·爱德华兹6分钟ago@SivcanSingh,好的,我明白了。谢谢@NinaScholz。一旦找到一组数字,是否有任何方法可以使函数短路?这是我的初衷。如果我在最初的问题中不清楚,我深表歉意。你想停下来搜索它找到第一个元素的位置吗?这种情况下我是不是t将只返回[1,2,6]。