当前位置: 首页 > 知识库问答 >
问题:

从给定数组中查找一对元素,其和等于JavaScript中的特定目标数

闻枫
2023-03-14

在Javascript中,还有其他有效的方法来实现此任务吗?

我尝试的身份是:

const a1 = [1,3,4,2,5,7,8,6];
var newArray =[];

function fun(a,n){      

for(let i = 0; i<a.length; i++){
 for(let j=i+1; j<a.length; j++){        
   if((a[i]+a[j])==n){        
     newArray.push([a[i],a[j]]);       
    }
  }
 }
}     

fun(a1, 10)
console.log(newArray);

这里输出:

[(3,7),(4,6),(2,8)]

共有3个答案

翟奕
2023-03-14

这是一个通常称为“二和问题”的一般编程问题,它本身是子集和问题的子集。但无论如何都可以有效地解决,我用这篇文章作为灵感。

js lang-js prettyprint-override">const a1 = [1, 3, 4, 2, 5, 7, 8, 6];

// our two sum function which will return
// all pairs in the array that sum up to S
function twoSum(arr, S) {

  const sums = [];
  const hashMap = new Map();

  // check each element in array
  for (let i = 0; i < arr.length; i++) {

    // calculate S - current element
    let sumMinusElement = S - arr[i];

    // check if this number exists in hash map
    // if so then we found a pair of numbers that sum to S
    if (hashMap.has(sumMinusElement.toString())) {
      sums.push([arr[i], sumMinusElement]);
    }

    // add the current number to the hash map
    hashMap.set(arr[i].toString(), arr[i])
  }

  // return all pairs of integers that sum to S
  return sums;
}

console.log(twoSum(a1, 10))
越学文
2023-03-14

我认为从暴力的角度来看,你的方法是有道理的。

优化方面,我想到了几件事。

>

可以按升序对列表进行排序,当总和超过目标值时,可以跳过内部循环的其余部分。

邵昆琦
2023-03-14

这个问题被标记为javascript,但这个答案基本上与语言无关。

如果数组已排序(或者您可以对其进行排序),您可以遍历数组并为其中的每个元素x在数组中二进制搜索(目标-x)。这为您提供了O(nlogn)运行时间。

如果可以使用额外内存,可以使用数组的元素填充字典,然后针对数组中的每个元素x,在字典中查找(target-x)。如果您的字典是在哈希表上实现的,那么这将为您提供O(n)运行时间。

 类似资料:
  • 我正在进行JavaScript会话。在我的编码练习中找到此代码。我理解逻辑,但我没有得到这个map[nums[x]]条件。 我试图从一个指定的数组中获取元素对,该数组的和等于一个特定的目标数。我已经写了下面的代码。 有没有比上述两种解决方案更优化的方法?有人能解释第一种解决方案吗?这个条件到底指的是什么映射[nums[x]]?

  • 问题内容: 给定一个数组,我们需要找到总和等于数字 X 的所有对。 例如: 问题答案: 解决方案1: 您可以检查每一对数字,并找到总和等于 X。 Java 代码: 解决方案2: 对数组进行排序 * 我们将维护两个索引,一个在开头(l=0),一个在结尾(r=n-1) * 迭代直到 l < r * 检查 arr[l] + arr[r] 是否等于 X * 如果是,则打印该对并执行 l , r– * 如果

  • 本文向大家介绍从三个链表中查找一个三元组,其总和等于C ++中的给定数字,包括了从三个链表中查找一个三元组,其总和等于C ++中的给定数字的使用技巧和注意事项,需要的朋友参考一下 在本教程中,我们将编写一个程序,该程序在链表中查找三元组,其总和等于给定的数字。 让我们看看解决问题的步骤。 为链表创建一个struct节点。 用伪数据创建链接列表。 为三个元素编写三个内部循环,这些循环将迭代直到链接列

  • 如果给定的和等于数组中任意两个元素的和,函数需要返回true;否则函数需要返回false。

  • 我在一次采访中被问到以下问题。虽然我用n元树回答了这个问题,但有人告诉我这还不够好。所以,我很好奇,什么是它的最佳解决方案。 输入:整数数组:[2,3,7]和总和:10 输出:加起来等于和的所有数组元素组合(例如2、2、3、3、7等) 谢了小泰

  • 问题陈述 任务是检查在长度为N的数组中是否存在K个元素的非连续子数组,其总和等于给定的总和。 例如, 长度为 3 且 sum=7 的非连续子数组为 [1,2,4]。 限制条件: 输出 如果存在 sum=TargetSum 的子数组,我们必须返回 True,如果不可能,则必须返回 False。