Лучший алгоритм поиска двух элементов в массиве, который суммируется с предоставленным значением

#javascript

#javascript

Вопрос:

Я пишу алгоритм для поиска двух элементов в массиве, который суммируется с предоставленным значением. т.Е. для массива [2, 7, 5, 3, 4, 11, 12, 56] и значения 9 я нахожу два элемента, например. 2 и 7 что увеличивает предоставляемую нами ценность 9 . Я получаю конечный результат в виде [ [ 2, 7 ], [ 4, 5 ] ] . Пожалуйста, найдите код ниже

 const getSumOfValuesInArr = (arr, val) => {
var result = [];
for (var i = 0; i < arr.length; i  ) {
    for (var j = i; j < arr.length; j  ) {
    if (arr[j]   arr[i] === val) {
        result.push([arr[i], arr[j]]);
    }
    }
}
console.log(result);
return resu<
};

getSumOfValuesInArr([2, 7, 5, 3, 4, 11, 12, 56], 9);
  

Но, как вы можете, это немного дороговато. Как я могу написать лучший алгоритм для повышения производительности? Пожалуйста, помогите.

Комментарии:

1. Ваш код в том виде, в каком он написан, не имеет ничего общего с тем, что вы описываете; вы добавляете индексы массива вместо значений массива.

2. Привет @Pointy, да, вы правы. Спасибо, что указали. Я изменю вопрос.

Ответ №1:

Вы могли бы выполнить один цикл и сохранить просмотренные значения в хэш-таблице.

Затем проверьте, видна ли дельта требуемой суммы и фактического значения, прежде чем добавлять пару в результирующий набор.

 const getSumOfValuesInArr = (arr, val) => {
    var result = [],
        seen = {};

    for (let i = 0; i < arr.length; i  ) {
        if (seen[val - arr[i]]) result.push([val - arr[i], arr[i]]);
        seen[arr[i]] = true;
    }

    return resu<
};

console.log(getSumOfValuesInArr([2, 7, 5, 3, 4, 11, 12, 56], 9));