Я работаю над созданием функции, которая при задании списка чисел и целевого номера возвращает сумму индексов списка, связанных с номерами, которые могут быть сопряжены с одним другим числом в список для создания целевого номера. Когда это возможно, эту сумму следует минимизировать.Алгоритм для нахождения суммы суммирующих пар idexes
Например, 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
очень интересный. позвольте мне посмотреть, могу ли я попытаться исправить вас algo –
Основная проблема с попарно ([1,1,1], 2) заключается в том, что вы уже установили log [j] равным 1 (что является вторым индексом) и вы не сбросите его для проверки во второй раз, когда вводится внешний цикл. ваш цикл суммирования, вероятно, должен быть внутри i-го цикла и соответствующим образом скорректирован –