Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 求求和偶象和的算法_Javascript_Algorithm - Fatal编程技术网

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循环内,并相应地进行调整