[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:
  1. Each of the array element will not exceed 100.
  2. 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.
Thought process:
DP. Calculate the sum of all numbers. If it's odd, return false.
  1. Sub-problem: check if a sub-array can sum to a number between 0 and sum / 2.
  2. Function: f[i + num] = true if f[i] == true.
  3. Initialization: f = new boolean[sum / 2 + 1]. Fill f[0] with true.
  4. 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

Popular posts from this blog

[LeetCode] 714. Best Time to Buy and Sell Stock with Transaction Fee

[LeetCode] 269. Alien Dictionary

[LeetCode] 631. Design Excel Sum Formula