您的位置:首页 > 其它

lintcode(588)Partition Equal Subset Sum

2017-05-20 10:51 260 查看
Description:

Given a 
non-empty
 array
containing 
only positive integers
,
find if the array can be partitioned into 
two
 subsets
such that the sum of elements in both subsets is equal.


 注意事项


Each of the array element will not exceed 100.

The array size will not exceed 200.

Explanation:

Given nums = 
[1, 5, 11, 5]
, return 
true


two subsets: [1, 5, 5], [11]

Given nums = 
[1, 2, 3, 9]
, return 
false

Solution:

First, calculate the sum of nuts. If the result is odd, return false. If not,
set the target as half of the sum.Then we can transform the problem to backpack. 

Regard mums[i] as element, target as the capacity of the backpack.

public class Solution {
/**
* @param nums a non-empty array only positive integers
* @return return true if can partition or false
*/
public boolean canPartition(int[] nums) {
// Write your code here
int sum = 0;
int len = nums.length;
for(int i = 0 ; i < len ; i++){
sum += nums[i];
}

if(sum%2 == 1) return false;
int target = sum/2;

int[][] dp = new int[len][target + 1];

for(int i = nums[0];i<=target;i++){
dp[0][i] = nums[0];
}

for(int i = 1;i<len;i++){
for(int j = nums[i];j<=target;j++){

4000
dp[i][j] = Math.max(dp[i-1][j] , dp[i - 1][j - nums[i]] + nums[i]);
}
}

if(dp[len - 1][target] == target) return true;
return false;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: