给定一个只包含正整数的非空数组。是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。
程序员文章站
2024-02-03 16:49:46
...
王某人只想说一句,这题可真简单,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;
}
上一篇: 把一个数分解成任意几个数之和