如何在数组中找到三个元素的和,它们的和等于某个目标和

我们必须编写一个函数,说它threeSum()接受一个Numbers数组和一个目标和。它检查数组中是否存在与目标总和相加的三个数字,如果数组中存在这三个数字,则应在数组中返回其索引,否则应返回-1。

方法

方法很简单,我们将首先编写一个函数twoSum(),该函数接受一个数组和一个目标和,并花费线性时间和空间来返回两个数字的索引,否则两个数字加起来就等于目标和。

然后,我们编写实际函数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