王某人只想说一句,这题可真简单,dp一次过
public static boolean canPartition(int[] nums) {
if(nums.length==0)return false;
int sum=0;
int max=0;
for(int x:nums)
{
sum+=x;
max=Math.max(max, x);
}
if(sum%2!=0)return false;
sum/=2;
if(max>sum)return false;
int []dp=new int[sum+1];
for(int i=0;i<nums.length;i++)
for(int j=dp.length-1;j>=nums[i];j--)
{
dp[j]=Math.max(dp[j], dp[j-nums[i]]+nums[i]);
}
return dp[sum]==sum;
}