JavaScript 中和值子数组对


我们需要编写一个 JavaScript 函数,该函数以整数数组作为唯一参数。

该函数应当确定是否存在一种方法,将数组分成两个子数组,使得两个子数组中元素之和相等。在将元素划分为子数组时,我们必须确保原始数组中的所有元素都没有遗漏。

例如:

如果输入数组为:

const arr = [5, 3, 7, 4, 1, 8, 2, 6];

那么输出应当为:

const output = true;

因为所需的子数组为:[5, 3, 4, 6] 和 [7, 1, 8, 2],它们的和都为 18。

示例

以下是代码:

const arr = [5, 3, 7, 4, 1, 8, 2, 6];
const canPartition = (arr = []) => {
   const sum = arr.reduce((acc, val) => acc + val);
   if (sum % 2 !== 0){
      return false;
   };
   const target = sum / 2;
   const array = new Array(target + 1).fill(false);
   array[0] = true;
   for (const num of arr) {
      if (array[target - num]){
         return true
      };
      for (let i = target; i >= num; i--) {
         array[i] = array[i - num];
      }
   }
   return false;
};
console.log(canPartition(arr));

输出

以下是控制台输出:

true

更新于: 2021-01-27

116 查看

开启您的职业生涯

完成课程,获得认证

开始
广告