【发布时间】:2016-11-18 04:04:06
【问题描述】:
我正在尝试为 Javascript 中的 2-Sum 问题编写一个简单的解决方案。问题是:给定一个由 n 个整数组成的数组和一个目标总和,确定两个整数的哪些组合将与目标值相加。
我发现了一些使用哈希表的不同语言无关示例,并尝试在 javascript 中提出解决方案:
// Integer set:
arr = [1,4,2,3,0,5];
// Target sum:
arg = 7;
// Generate hash table
hashTable = {};
arr.forEach(function(value, index){
hashTable[value] = index;
});
// hashTable = {
// 0: 4,
// 1: 0,
// 2: 2,
// 3: 3,
// 4: 1,
// 5: 5,
// }
for (var i = 0; i < arr.length; i++) {
if (hashTable[arg - arr[i]]) {
console.log([hashTable[arg - arr[i]], i])
}
}
解决方案应该是 4,3 和 5,2,但我得到 3,1 5,2 1,3 和 2,5。我可以用笔和纸遍历 for 循环,看看我做错了什么,但我很确定我正在遵循我发现的与语言无关的示例(例如 here 和 here)。任何帮助,将不胜感激。
【问题讨论】:
-
有a very concise solution这个问题相对容易翻译成JavaScript。
-
循环 7-4 的第二遍是 3。您是否在与地球其他部分不同的数学平面上运行?
hashTable[3]仍然是 3。 -
@PHPglue 对不起,我真的不确定你在做什么。它是一个未排序的列表,值 3 恰好在索引 3 处。
-
动态编程自下而上的方法应该是最好的
标签: javascript arrays algorithm