当前位置: 首页 > news >正文

分割等和子集-leetcode

题目描述

给你一个 只包含正整数非空 数组 nums 。请你判断是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。

示例 1:

输入:nums = [1,5,11,5]
输出:true
解释:数组可以分割成 [1, 5, 5] 和 [11] 。

示例 2:

输入:nums = [1,2,3,5]
输出:false
解释:数组不能分割成两个元素和相等的子集。

提示:

  • 1 <= nums.length <= 200
  • 1 <= nums[i] <= 100

解法一

思路:

0-1 背包问题的变种。要将数组分割成两个元素和相等的子集,实际上就等价于:能否从数组中挑出一些元素,使得这些元素的总和刚好等于整个数组总和的一半

dp[i][j] 表示:能否从前 i 个元素中挑选出若干个,使得它们的和恰好等于 j

对于当前的数字 nums[i],我们只有两种选择: 或者 不选

  • 情况 1:不选 nums[i] 如果我们不把 nums[i] 放入子集中,那么能否凑成和为 j,完全取决于前 i-1 个元素。 此时:dp[i][j] = dp[i-1][j]
  • 情况 2:选 nums[i] 前提是当前的目标和 j 必须大于等于 nums[i](背包得装得下)。如果选了它,那么剩下的目标和就是 j - nums[i],我们需要看前 i-1 个元素能否凑出 j - nums[i]。 此时:dp[i][j] = dp[i-1][j - nums[i]]

状态转移方程:

如果 j >= nums[i] :dp[i][j] = dp[i-1][j] 或者 dp[i-1][j - nums[i]]  (只要有一个为 true,结果就为 true)
如果 j < nums[i] :dp[i][j] = dp[i-1][j]

代码:

class Solution {public boolean canPartition(int[] nums) {int sum = 0;for (int num : nums) {sum += num;}if (sum % 2 != 0) return false;int target = sum / 2;boolean[][] dp = new boolean[nums.length + 1][target + 1];dp[0][0] = true;for (int i = 1; i <= nums.length; i++) {for (int j = 0; j <= target; j++) {if (j - nums[i - 1] >= 0) {dp[i][j] = dp[i - 1][j - nums[i - 1]]||dp[i - 1][j];}else dp[i][j] = dp[i - 1][j];}}return dp[nums.length][target];}
}
http://www.jsqmd.com/news/676527/

相关文章:

  • 体验优先:十分钟使用 Python+LangChain 玩转阿里通义千问
  • H1: BlenderKit插件跨平台兼容性问题的全面诊断与解决方案
  • 想当无人机培训讲师去哪里学,阜阳靠谱的学校有哪些 - 工业设备
  • 百度网盘智能提取码助手:3分钟掌握高效资源获取技巧
  • Gemma 4 / PaliGemma 2 / Ollama / Open WebUI 本地部署复盘
  • 3步搞定:浙江大学毕业论文LaTeX模板的完整使用指南
  • 2026年,揭秘玻璃镜片定制背后的匠心工艺 - 品牌企业推荐师(官方)
  • STM32串口IAP(在应用编程)例程
  • 保姆级教程:在Windows/Mac上为Jieba安装PaddlePaddle加速库(附常见安装报错解决)
  • 别再死记硬背公式了!用Matlab亲手画个电偶极子,秒懂电场线和等势面
  • 探讨2026年莆田、漳州发电机租赁,选购时关注哪些要点 - mypinpai
  • Phi-3.5-Mini-Instruct高效推理实践:transformers pipeline调用全步骤
  • 基于ESPHome与逻辑分析仪,解码并集成非标433M遥控幕布至Home Assistant
  • 从用户痛点出发,选对玻璃温室大棚生产厂才是稳产关键 - 品牌企业推荐师(官方)
  • 别只盯着真实数据了!用PaddleOCR的StyleText合成数据集,我踩了这些坑
  • 从桌面到手机:用Qt 5.14.2开发你的第一个Android App完整流程
  • 2026年广东转接线靠谱生产商排名,钦利发科技高品质产品脱颖而出 - myqiye
  • 手把手教你用C++封装ZooKeeper客户端:从连接、创建节点到服务发现实战
  • 事务内存与缓存优化:并发编程核心技术解析
  • 别再凭感觉选电容了!手把手教你计算STM32/STM8晶振的匹配电容(附PCB布局要点)
  • 覆盖全飞秒/半飞秒/ICL全术式 西安奕鸣眼科以“技术+温度”领跑西北屈光矫正赛道 - 深度智识库
  • 选购指南:从南京天水看多效蒸馏水机的节能技术与工艺细节 - 品牌推荐大师
  • Claude Code每日更新速览(v2.1.116)-2026/04/21
  • 别再只把CART当分类树了:手把手教你用Python实现回归树预测房价(附完整代码)
  • CSDN+GitHub双栖开发者生存指南技术
  • 【Unity面试精讲】网络编程核心八问:从Socket到协议栈的深度剖析 | 附高频考点解析
  • Android Studio中文插件完整指南:三步实现母语开发环境
  • SDXL 1.0多模态协同:灵感画廊输出图像与配套生成的诗意文案同步创作演示
  • 2026年转接线定制费用大揭秘,钦利发科技性价比出众 - 工业推荐榜
  • 处理大体积DBF文件导入卡顿怎么办_性能优化与分批操作