//思路是先排序,两个数组绝对值最小那么通过一个数组中比较大的值去替换另一个数组中比较小的值,求得它们的组合数,再分别计算即可
let arr = [1,5,62,5,23,-62,6,22,-2,-5];
let n = arr.length / 2;
function name(arr, n) {
let leftArr = [];
let rightArr = [];
let l = arr.length;
let total = arr.reduce((a, b) => a + b);
let min = Infinity;
function slice(ta, t, b = true, s = 0, dd = []) {
if (dd.length === t) {
if (b) {
leftArr.push(dd);
} else {
rightArr.push(dd);
}
}
for (let i = s; i < ta.length; i++) {
slice(ta, t, b, i + 1, dd.concat(ta[i]));
}
}
for (let j = 1; j < n; j++) {
slice(arr.slice(0, n), j, true);
slice(arr.slice(n, l), j, false);
}
for (let i = 0; i < leftArr.length; i++) {
const e = leftArr[i];
for (let j = 0; j < rightArr.length; j++) {
const e1 = rightArr[j];
if (e.length + e1.length === n) {
const temp = e.reduce((a, b) => a + b) + e1.reduce((a, b) => a + b);
min = Math.min(min, Math.abs(total - 2 * temp));
}
}
}
console.log(leftArr, rightArr, min);
}
name(arr.sort((a, b) => a - b), n);
``
长度为2n的数组拆分成两个n长度的数组的和之间的差绝对值最小值【递归】
最新推荐文章于 2024-03-06 16:16:27 发布
该博客探讨了一种通过排序和遍历数组来寻找两组组合,使得它们的元素之和与原数组总和的差值绝对值最小的方法。具体实现是通过递归切分数组并计算组合数,然后计算每组组合的和,最后找到使差值最小的组合。
540

被折叠的 条评论
为什么被折叠?



