416. 分割等和子集
解法:
代码随想录
题目:
- LeetCode
1. 求sum的一半刚好是等分值。(如果sum % 2 != 0,则无法等分)
2. 将“背包”设置成等分大小。
3. 在确立等分值的情况下,每个值只取一次,如果数组中存在子集之和小于等于等分值情况,那么题目条件则成立,如果小于(无法装满背包)则不成立。
class Solution {
public boolean canPartition(int[] nums) {
int sum = 0;
for (int i : nums) {
sum += i;
}
if (sum % 2 != 0) return false;
int half = sum / 2;
int[] arr = new int[half + 1];
for (int i = 0; i < nums.length; i++) {
for (int j = half; j >= nums[i]; j--) {
arr[j] = Math.max(arr[j], arr[j - nums[i]] + nums[i]);
}
}
return arr[half] == half;
}
}