欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

给定一个只包含正整数的非空数组。是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。

程序员文章站 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;
}