ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

代码随想录算法训练营第四十一天|416.分割等和子集

2026/9/19 1:01:25 拓冰建站 浏览量
代码随想录算法训练营第四十一天|416.分割等和子集

416.分割等和子集 

public class Solution {public bool CanPartition(int[] nums) {int[] dp=new int[10001];int sum=0;for(int i=0;i<nums.Length;i++){sum+=nums[i];}if(sum%2==1){return false;}int target=sum/2;for(int i=0;i<nums.Length;i++){for(int j=target;j>=nums[i];j--){dp[j]=Math.Max(dp[j],dp[j-nums[i]]+nums[i]);}}if(dp[target]==target){return true;}return false;}
}

首先要确定的是一个数只能用一次所以使用01背包问题,要想使两个数组的和相同那Nums数组一定要是偶数和才行,其次要找到偶数和的一班作为背包的Target,也就是01背包的最大价值,其中内层要采用倒序才能避免重复相加,在一维数组的基础上稍作修改,Dp[j]=Math.Max(Dp[j],Dp[j-Nums[i]]+Nums[i])最终判断DP数组是否为Target是的话则成功。