如何在 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

更新于:2020年8月25日

499 次浏览

开启你的职业生涯

通过完成课程获得认证

开始学习
广告