平衡 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 次浏览

开启你的 职业生涯

完成课程,获取认证

开始使用
广告