如何在 JavaScript 中找到数组中三个元素的组合,使其和等于目标值
我们必须编写一个函数,例如 threeSum(),它接收一个数字数组和一个目标和作为输入。它检查数组中是否存在三个数字的和等于目标和,如果数组中存在这样的三个数字,则应返回它们的索引数组,否则应返回 -1。
方法
方法很简单,我们首先编写一个函数 twoSum(),它接收一个数组和一个目标和作为输入,并以线性时间和空间复杂度返回两个数字的索引,这两个数字的和等于目标和,否则返回 -1。
然后我们编写实际函数 threeSum(),它遍历数组中的每个元素,以查找第三个元素的索引,当将其与 twoSum() 的结果相加时,可以达到实际的目标值。
因此,我们可以用 O(N^2) 的时间复杂度找到这三个元素。让我们为此编写代码:
示例
const arr = [1,2,3,4,5,6,7,8]; const twoSum = (arr, sum) => { const map = {}; for(let i = 0; i < arr.length; i++){ if(map[sum-arr[i]]){ return [map[sum-arr[i]], i]; }; map[arr[i]] = i; }; return -1; }; const threeSum = (arr, sum) => { for(let i = 0; i < arr.length; i++){ const indices = twoSum(arr, sum-arr[i]); if(indices !== -1 && !indices.includes(i)){ return [i, ...indices]; }; }; return -1; }; console.log(threeSum(arr, 9)); console.log(threeSum(arr, 8)); console.log(threeSum(arr, 13)); console.log(threeSum(arr, 23));
输出
控制台输出将是:
[ 0, 2, 4 ] [ 0, 2, 3 ] [ 0, 4, 6 ] -1
广告