Skip to content

416. Partition Equal Subset Sum

Description

Given an integer array nums, return true if you can partition the array into two subsets such that the sum of the elements in both subsets is equal or false otherwise.

 

Example 1:

Input: nums = [1,5,11,5]
Output: true
Explanation: The array can be partitioned as [1, 5, 5] and [11].

Example 2:

Input: nums = [1,2,3,5]
Output: false
Explanation: The array cannot be partitioned into equal sum subsets.

 

Constraints:

  • 1 <= nums.length <= 200
  • 1 <= nums[i] <= 100

 

Solutions

Solution: Dynamic Programming

  • Time complexity: O(n*SUM(nums)/2)
  • Space complexity: O(SUM(nums)/2)

 

JavaScript

js
/**
 * @param {number[]} nums
 * @return {boolean}
 */
const canPartition = function (nums) {
  const totalSum = nums.reduce((sum, num) => sum + num);

  if (totalSum % 2) return false;
  const subsetSum = totalSum / 2;
  const dp = Array.from({ length: subsetSum + 1 }, () => false);

  dp[0] = true;

  for (const num of nums) {
    for (let sum = subsetSum; sum >= num; sum--) {
      dp[sum] = dp[sum - num] || dp[sum];
    }
  }

  return dp[subsetSum];
};

Released under the MIT license