Javascript 求求和偶象和的算法
我正在创建一个函数,给定一个数字列表和目标数字,该函数返回与数字相关联的列表索引的总和,这些数字可以与列表中的另一个数字配对以创建目标数字。在可能的情况下,应尽量减少该总和 例如,Javascript 求求和偶象和的算法,javascript,algorithm,Javascript,Algorithm,我正在创建一个函数,给定一个数字列表和目标数字,该函数返回与数字相关联的列表索引的总和,这些数字可以与列表中的另一个数字配对以创建目标数字。在可能的情况下,应尽量减少该总和 例如,f([0,0,0,0,1,1],1)应该返回10,因为有两对数字和为一,这些数字对的最小值索引是(0,4)和(1,5),并且0+1+4+5=10 f([1,1,1],2)应产生1-求和对索引的最低值为(0,1)和0+1=1 这是我迄今为止的尝试。我不明白为什么我的算法不适用于第二种情况。我的策略是从最低索引到最高索引进
f([0,0,0,0,1,1],1)
应该返回10,因为有两对数字和为一,这些数字对的最小值索引是(0,4)和(1,5),并且0+1+4+5=10
f([1,1,1],2)
应产生1-求和对索引的最低值为(0,1)和0+1=1
这是我迄今为止的尝试。我不明白为什么我的算法不适用于第二种情况。我的策略是从最低索引到最高索引进行搜索,确保先记录较低值的索引
function pairwise(arr, arg)
{
// initiate log with all zeros
var log = [];
for (var i = 1; i <= arr.length; i++)
{
log.push(0);
}
// look for summing pairs
for (i = 0; i < arr.length; i++)
{
for (j = i; j < arr.length; j++)
{
// check if summing pair
if(arr[i] + arr[j] == arg
// also check if either number has been logged
&& log[i] == 0
&& log[j] == 0)
{
log[i] = 1;
log[j] = 1;
}
}
}
// include only indexes with summing pairs in sum
var summ = 0;
for (var i = 1; i < arr.length; i++)
{
summ = summ + log[i] * i;
}
return summ;
}
pairwise([1, 1, 1], 2); // returns 3 not 1
函数成对(arr,arg)
{
//用全零初始化日志
var log=[];
对于(var i=1;i为了避免将元素与自身进行比较,应使用:
for (i = 0; i < arr.length-1; i++)
{
for (j = i+1; j < arr.length; j++)
for(i=0;i
非常有趣。让我看看是否可以尝试为您解决pairwise([1,1,1],2]的主要问题是您已经将log[j]设置为1(这是第二个索引)当外部循环第二次进入时,你不会重置它进行检查。你的求和循环应该在i循环内,并相应地进行调整