Это общая проблема программирования, обычно называемая «проблемой двух сумм», которая сама является подмножеством проблемы подмножества сумм . Но тем не менее можно решить эффективно, и я использовал эту статью в качестве вдохновения.
const a1 = [1, 3, 4, 2, 5, 7, 8, 6];
// our two sum function which will return
// all pairs in the array that sum up to S
function twoSum(arr, S) {
const sums = [];
const hashMap = new Map();
// check each element in array
for (let i = 0; i < arr.length; i++) {
// calculate S - current element
let sumMinusElement = S - arr[i];
// check if this number exists in hash map
// if so then we found a pair of numbers that sum to S
if (hashMap.has(sumMinusElement.toString())) {
sums.push([arr[i], sumMinusElement]);
}
// add the current number to the hash map
hashMap.set(arr[i].toString(), arr[i])
}
// return all pairs of integers that sum to S
return sums;
}
console.log(twoSum(a1, 10))
Здесь я использую объект Map , так как я думаю, что это быстрее, когда проверяется, существует ли уже число, но я могу ошибаться, и вы можете использовать только простой объект, как в статье, если хотите.