【发布时间】:2020-02-27 10:05:18
【问题描述】:
我试图找到给定数组的四个数字总和。任务是在数组中找到总和为目标和的所有四联体,并以无特定顺序返回所有这些四联体的二维数组。如果没有四个唯一数字的总和达到目标总和,则该函数应返回一个空数组。
我尝试了以下代码似乎工作正常,但由于重复元素,我得到了一个额外的四倍。
function fourSum([1,2,3,4,5,6,7],10) {
var hash = {};
var quadruples = [];
for(var i=0; i<array.length; i++){
for(var j=0; j<array.length;j++){
var Q = 0;
var P = 0;
if(i<j){
Q = array[i]+array[j];
if(hash[(targetSum - Q)]){
for(var k=0; k< hash[(targetSum - Q)].length; k++){
var combination = [hash[(targetSum - Q)][k][0] , hash[(targetSum - Q)][k][1] ,array[i], array[j]];
quadruples.push(combination);
}
}
}
if(i>j){
P = array[i]+array[j];
if(hash[P]){
hash[P].push([array[i], array[j]]);
}else{
hash[P] = [[array[i], array[j]]];
}
}
}
}
return quadruples;
}
这会返回以下内容:{[2, 1, 2, 5], [2, 1, 3, 4]} 这是不正确的,因为在 [2, 1, 2, 5] 中,我们有 2 两次。我无法找出我的代码哪里错了。
【问题讨论】:
标签: javascript arrays algorithm