Partition Equal Subset Sum
Problem
https://leetcode.com/problems/partition-equal-subset-sum/
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
Pattern
Array, Dynamic Programming
Approaches
Code
def canPartition(nums: list[int]) -> bool:
S = sum(nums)
if S % 2 != 0:
return False
target = S // 2
sums_so_far = set([0])
for num in nums:
next_sums_so_far = set()
for s in sums_so_far:
if num + s == target:
return True
if num + s < target:
next_sums_so_far.add(s + num)
next_sums_so_far.add(s)
sums_so_far = next_sums_so_far
return False
Test
>>> from partition_equal_subset_sum__dynamic_programming import canPartition
>>> canPartition([1, 5, 11, 5])
True
>>> canPartition([1, 2, 3, 5])
False
- partition_equal_subset_sum__dynamic_programming.canPartition(nums: list[int]) bool