#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));