C解法

更新中
 class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">

JS解法

解题分析:

假设数组总和为 totalPower,子集1的和为 partialSum,子集2的和为 totalPower - partialSum。
差值为 Math.abs(totalPower - 2 * partialSum)。
目标是找到一个 partialSum,使得上述差值最小。
解决方法:

遍历所有可能的子集,计算每个子集的和。
用递归的方法生成所有可能的子集和。
对于每种可能的子集和,计算差值并找到最小值。
优化:

使用一个数组保存所有的子集和,避免重复计算。
由于组合的数量较大,可以通过限制子集的大小(如限制子集大小为5)来减少计算量。

const readline = require("readline"); // 引入 readline 模块,用于处理标准输入输出

// 创建一个 readline 接口,用于从命令行读取输入
const rl = readline.createInterface({
  input: process.stdin, // 标准输入
  output: process.stdout, // 标准输出
});

// 监听每一行输入
rl.on("line", (line) => {
  const arr = line.split(" ").map(Number); // 将输入的字符串分割成数组,并转换为数字
  console.log(findMinDifference(arr)); // 调用函数计算最小差值,并打印结果
});

/**
 * 主函数:找到两个子集和的最小差值
 * @param {number[]} arr 输入的整数数组
 * @returns {number} 最小差值
 */
function findMinDifference(arr) {
  arr.sort((a, b) => a - b); // 对数组进行排序,便于后续处理

  const allCombinations = []; // 存储所有子集和
  findCombinations(arr, 0, 0, 0, allCombinations); // 调用递归函数生成所有可能的子集和

  const totalPower = arr.reduce((acc, val) => acc + val, 0); // 计算数组的总和

  // 遍历所有子集和,计算差值并返回最小差值
  return allCombinations
    .map((partialSum) => Math.abs(totalPower - 2 * partialSum)) // 计算每种子集和的差值
    .sort((a, b) => a - b)[0]; // 返回最小差值
}

/**
 * 递归函数:生成所有可能的子集和
 * @param {number[]} arr 输入数组
 * @param {number} start 当前起始索引
 * @param {number} depth 当前子集的深度
 * @param {number} partialSum 当前子集的和
 * @param {number[]} result 保存所有子集和的数组
 */
function findCombinations(arr, start, depth, partialSum, result) {
  if (depth === 5) { // 如果当前子集的大小达到5
    result.push(partialSum); // 将当前子集的和加入结果数组
    return; // 结束当前递归
  }

  // 遍历数组中的每个元素,从 start 开始
  for (let i = start; i < arr.length; i++) {
    findCombinations(arr, i + 1, depth + 1, partialSum + arr[i], result); 
    // 递归:选择当前元素,更新索引、深度和子集和
  }
}

 class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">

注意:

如果发现代码有用例覆盖不到的情况,欢迎反馈!会在第一时间修正,更新。
解题不易,如对您有帮助,欢迎点赞/收藏

注:本文转载自blog.csdn.net的CodeClimb的文章"https://blog.csdn.net/CodeClimb/article/details/145066268"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接

评论记录:

未查询到任何数据!