Javascript 迭代数组并查找一系列数字之间的和

Javascript 迭代数组并查找一系列数字之间的和,javascript,arrays,Javascript,Arrays,例如,如果我传递数字10和数组[1,2,4,4],如果数组是[4,2,1,1],函数应该返回false,因为总和不在两个数字之间。我会像这样不递归地求解它,只需在元素和下一个元素上循环,并在找到解决方案后立即退出循环: 函数解决方案(n,arr){ 如果(n

例如,如果我传递数字10和数组
[1,2,4,4]
,如果数组是
[4,2,1,1]
,函数应该返回false,因为总和不在两个数字之间。

我会像这样不递归地求解它,只需在元素和下一个元素上循环,并在找到解决方案后立即退出循环:

函数解决方案(n,arr){
如果(n<0)返回null;
如果(n==0)返回[];
对于(变量i=0;ilog(解决方案(8,[-1,2,3,4])检查两个数字之和的简单实现是一个嵌套循环,请参见以下内容:

function isSumInArray(sum, array) {
    for (let i=0; i < array.length; i++) {
        for (let j=0; j < array.length; j++) {
            if (array[i] + array[j] === sum && i !== j) {
                return true 
            }
        }
    }
    return false;
}
函数isSumInArray(和,数组){
for(设i=0;i
有更好的方法来实现这一点,但我选择它是因为我认为这是最简单的理解。在这里,您将遍历数组两次,如果这两个数字等于所需的和(并且它们在数组中不是相同的数字),则返回true。如果没有任何组合满足此条件,则返回false

使用和函数检查给定数组中任意两个数字的和是否等于传递的参数-请参阅下面的演示:

函数解决方案(num,数组){
返回数组.some(函数(e,i){
return(num-e+array.find)(函数(c,k){
返回c==e&&i!=k
}))==num;
});
}

log(解决方案(8,[-1,2,3,4]),解决方案(8,[-1,4,3,4]),解决方案(8,[4,3,45,2,5,3])

功能测试(数组,n)
{

对于每个元素的(var i=0;i,您需要对每个其他元素进行“计算”,以查看它们的总和是否正确

最简单的实现是嵌套循环O(N^2)

伪代码:

def solution(list, target)
  for each element e1 in list
    for each element e2 in list
      if e2 is e1 
        continue
      end if
      if e1 + e2 is target
        return true
      end if
    loop
  loop
  return false
end def
代码:

功能解决方案(列表、目标){
for(设i=0;i控制台日志(解决方案([1,2,3,4,5],2))
任意两个数字,或两个相邻的数字?同样,递归是一个要求吗?任意两个@mHodges我们可以得到解释如何得到正确答案的答案吗?另外,我想指出的是,你的函数应该只返回一个
类型
。如果我使用它,我希望返回一个布尔值,而不是null或数组。我认为如果您先对数组排序,然后尝试匹配,这可能会更有效。如果时间复杂,这可能会导致更好的方法。您可以从I+1而不是0开始j,以避免重复,例如:[1,2,3,4],当您用2检查1时,无需再次用1检查2。