Skip to content

Latest commit

 

History

History
executable file
·
53 lines (41 loc) · 1.36 KB

416. Partition Equal Subset Sum.md

File metadata and controls

executable file
·
53 lines (41 loc) · 1.36 KB

416. Partition Equal Subset Sum

Question

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.

Solution:

  • Method 1: dp 01KnapSack
    class Solution {
        public boolean canPartition(int[] nums) {
            int len = nums.length;
            int sum = 0;
            for(int num : nums)
                sum += num;
            if((sum & 1) == 1) return false;
            sum >>= 1;
            boolean[][] dp = new boolean[sum + 1][len + 1];
            dp[0][0] = true;
            for(int i = 1; i <= sum; i++){
                for(int j = 1; j <= len; j++){
                    dp[i][j] = dp[i][j - 1];
                    dp[i][j] |= i - nums[j - 1] >= 0 ? dp[i - nums[j - 1]][j - 1]: false;
                }
            }
            return dp[sum][len];
        }
    }

Reference

  1. Algorithm | 01 knapsack question DP