如何在 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 次瀏覽

開啟你的職業生涯

透過完成課程獲得認證

開始學習
廣告
© . All rights reserved.