思路 问题转化:给定一个数组,是否能从数组中选出一个子集,使得其和恰好为数组总和的一半。(这样没被选中的那一半一定也是 数组总和的一半,两者的和相等)
1.问什么定义什么
dpi,j 代表 是否能从前i个数中选出一个子集使得其和恰好为j
dpi,j∈{True,False}
给定一个非空数组 nums,其中所有元素都是正整数。请判断该数组是否可以被拆分为两个子集,使得两个子集各自包含的元素之和相等。若存在这样的拆分方案,返回 true;否则返回 false。
约束条件:
nums 的长度在 1 到 200 之间。nums[i] 的值在 1 到 100 之间。输入包含一个参数:一个整数列表 nums,表示给定的非空正整数数组。
返回一个布尔值。如果可以将 nums 分割成两个元素和相等的子集,返回 true;否则返回 false。
输入
7
输出
false
说明
数组只有一个元素 7,总和为 7。若要拆成两个子集且元素和相等,每个子集的和应为 7÷2=3.5,这不是整数。
同时两个子集都需要从原数组中取元素,单个元素无法同时分给两个非空子集,因此输出 false。
输入
1 1
输出
true
说明
数组总和为 2,要分成两个和相等的子集,每个子集的和应为 1。
可以把两个 1 分别放入两个子集,得到两个子集的和都为 1,因此输出 true。
输入
1 2 3 4
输出
true
说明
将 1 和 4 放入第一个子集,将 2 和 3 放入第二个子集。
输入
1 2 3 4 5
输出
false
说明
数组总和为 15,无法拆分成两个整数和的相等子集,因此输出 false。
© CodeFun2000 · 使用条款
Scan the QR code below with WeChat to sign in
First-time scan will create your account automatically
请使用微信扫描下方二维码完成注册