代码随想录算法训练营第四十二天| 01背包问题 二维 一维 理论 416. 分割等和子集
一、力扣416. 分割等和子集
题目链接
思路:划分等和子集,先加和除以2,如果余数是1必不可能划分等和,余数为0,以半数和为背包容量套模板
class Solution {
public boolean canPartition(int[] nums) {
int target = 0;
for (int i = 0; i < nums.length; i++) {
target += nums[i];
}
if (target % 2 == 1) return false;
target = target / 2;
int[] bag = new int[target+1];
for (int i = 0; i < nums.length; i++) {
for (int j = target; j >= nums[i]; j--) {
bag[j] = Math.max(bag[j], bag[j - nums[i]] + nums[i]);
}
if (bag[target] == target) return true;
}
return bag[target] == target;
}
}