如何在数组中找到一组三个元素,其总和等于某个目标总和 JavaScript

javascriptweb developmentobject oriented programming更新于 2025/10/8 22:36:17

我们必须编写一个函数,比如 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

相关文章


有用资源