lintcode(588)Partition Equal Subset Sum
2017-05-20 10:51
260 查看
Description:
Given a
containing
find if the array can be partitioned into
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 =
two subsets: [1, 5, 5], [11]
Given nums =
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;
}
}
Given a
non-emptyarray
containing
only positive integers,
find if the array can be partitioned into
twosubsets
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;
}
}
相关文章推荐
- 588 - Partition Equal Subset Sum
- 416. Partition Equal Subset Sum
- 416. Partition Equal Subset Sum
- 416. Partition Equal Subset Sum
- 416. Partition Equal Subset Sum
- 416. Partition Equal Subset Sum
- 416. Partition Equal Subset Sum
- 416. Partition Equal Subset Sum
- [LeetCode] 416 Partition Equal Subset Sum
- Partition Equal Subset Sum
- leetCode No.416 Partition Equal Subset Sum
- 416. Partition Equal Subset Sum
- 416. Partition Equal Subset Sum
- LeetCode—— Partition Equal Subset Sum
- 416. Partition Equal Subset Sum
- LeetCode - 416 - Partition Equal Subset Sum
- Partition Equal Subset Sum解题报告
- [LeetCode OJ]Partition Equal Subset Sum
- lintcode: Partition Equal Subset Sum
- 416. Partition Equal Subset Sum