[LeetCode] 416. Partition Equal Subset Sum
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.
Note:
- Each of the array element will not exceed 100.
- The array size will not exceed 200.
Example 1:
Input: [1, 5, 11, 5] Output: true Explanation: The array can be partitioned as [1, 5, 5] and [11].
Example 2:
Input: [1, 2, 3, 5] Output: false Explanation: The array cannot be partitioned into equal sum subsets.
DP. Calculate the sum of all numbers. If it's odd, return false.
- Sub-problem: check if a sub-array can sum to a number between 0 and sum / 2.
- Function: f[i + num] = true if f[i] == true.
- Initialization: f = new boolean[sum / 2 + 1]. Fill f[0] with true.
- Answer: the last element of f.
Solution:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | class Solution { public boolean canPartition(int[] nums) { int sum = 0; for (int num : nums) { sum += num; } if (sum % 2 == 1) { return false; } boolean[] f = new boolean[sum / 2 + 1]; f[0] = true; for (int num : nums) { for (int i = f.length - num - 1; i >= 0; i--) { if (f[i] == true) { f[i + num] = true; } } } return f[f.length - 1]; } } |
Time complexity: O(2^n).
Comments
Post a Comment