代码随想录训练营第42天|416.分割等和子集
- 416.分割等和子集
- 文章
- 思路
- 代码
- 总结
416.分割等和子集
文章
代码随想录|0416.分割等和子集
思路
看作容量为总和一半的背包问题,某方案恰好能装满时返回TRUE
二刷,还是不能一遍过
新学了一维数组的写法
代码
class Solution {public boolean canPartition(int[] nums) {int capacity = 0;int i, j, n;n = nums.length;for (i = 0; i < n; ++i) {capacity += nums[i];}if (capacity % 2 == 1) {return false;}capacity /= 2;int[] dp = new int[capacity + 1];for (j = 0; j < capacity + 1; ++j) {dp[j] = nums[0] <= j ? nums[0] : 0;//System.out.print(" " + dp[j]);}//System.out.println();for (i = 1; i < n; ++i) {for (j = capacity; j > 0; --j) {dp[j] = j >= nums[i] ? Math.max(dp[j - nums[i]] + nums[i], dp[j]) : dp[j];//System.out.print(" " + dp[j]);if (dp[j] == capacity) {return true;}}//System.out.println();}return false;}
}
总结
一维数组要倒序遍历,防止修改过前面的值对后面造成影响