首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在数组中查找两个合计为所提供值的元素的更好算法

在数组中查找两个合计为所提供值的元素的更好算法
EN

Stack Overflow用户
提问于 2020-09-13 04:00:33
回答 1查看 23关注 0票数 1

我正在编写一个算法,用于在一个数组中查找两个元素,该元素的总和为所提供的值。也就是说,对于数组[2, 7, 5, 3, 4, 11, 12, 56]和值9,我找到了两个元素,例如。27,这增加了我们提供的值9。我将以[ [ 2, 7 ], [ 4, 5 ] ]的身份获得最终结果。请找到下面的代码

代码语言:javascript
复制
const getSumOfValuesInArr = (arr, val) => {
var result = [];
for (var i = 0; i < arr.length; i++) {
    for (var j = i; j < arr.length; j++) {
    if (arr[j] + arr[i] === val) {
        result.push([arr[i], arr[j]]);
    }
    }
}
console.log(result);
return result;
};

getSumOfValuesInArr([2, 7, 5, 3, 4, 11, 12, 56], 9);

但正如你所能做到的,它有点贵。如何编写更好的算法以获得更好的性能?请帮帮忙。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-13 04:05:15

您可以采用单个循环,并将看到的值存储在哈希表中。

然后检查之前是否看到了所需总和和实际值的增量,然后将该对添加到结果集中。

代码语言:javascript
复制
const getSumOfValuesInArr = (arr, val) => {
    var result = [],
        seen = {};

    for (let i = 0; i < arr.length; i++) {
        if (seen[val - arr[i]]) result.push([val - arr[i], arr[i]]);
        seen[arr[i]] = true;
    }

    return result;
};

console.log(getSumOfValuesInArr([2, 7, 5, 3, 4, 11, 12, 56], 9));

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63864419

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档