平衡 JavaScript 中的兩個陣列


問題

我們需要編寫一個 JavaScript 函式,它分別將兩個數字陣列 arr1 和 arr2 作為第一個和第二個引數。

arr1 和 arr2 中元素的和是不同的。我們的函式應從第一個陣列中挑選一個元素並將其推送到第二個陣列中,從第二個陣列中挑選一個元素並將其推送到第一個陣列中,使得兩個陣列中元素的和相等。我們應該返回這兩個元素的陣列。

例如,如果函式的輸入是

輸入

const arr1 = [1, 2, 5];
const arr2 = [2, 4];

輸出

const output = [5, 4];

輸出說明

因為如果我們從 arr1 中移除 5 並將其推送到 arr2,從 arr2 中移除 4 並將其推送到 arr1,則兩個陣列的和將相等 (7)。

以下是程式碼

示例

const arr1 = [1, 2, 5];
const arr2 = [2, 4];
const balanceArrays = (arr1 = [], arr2 = []) => {
   const sumA = arr1.reduce((acc, v) => acc + v, 0)
   const sumB = arr2.reduce((acc, v) => acc + v, 0)
   const difference = (sumA + sumB) / 2 - sumA
   const map = arr2.reduce((acc, v) => {
      acc[v] = true
      return acc
   }, {})
   for(let i = 0; i < arr1.length; i++) {
      if(map[arr1[i] + difference] === true) {
         return [arr1[i], arr1[i] + difference]
      }
   }
   return []
};
console.log(balanceArrays(arr1, arr2));

輸出

[5, 4]

更新時間:23-04-2021

298 次瀏覽

開啟你的 職業生涯

完成課程,獲取認證

開始使用
廣告