LeetCode-in-All

416. Partition Equal Subset Sum

Medium

Given a non-empty array nums 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.

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:

Solution

func canPartition(nums []int) bool {
	sums := 0
	for _, num := range nums {
		sums += num
	}
	if sums%2 == 1 {
		return false
	}
	sums /= 2
	dp := make([]bool, sums+1)
	dp[0] = true
	for _, num := range nums {
		for sum := sums; sum >= num; sum-- {
			dp[sum] = dp[sum] || dp[sum-num]
		}
	}
	return dp[sums]
}