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 <= 2001 <= 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];
};