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
广告