LeetCode-in-Go

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 {
	sum := 0
	for _, v := range nums {
		sum += v
	}
	if sum%2 == 1 {
		return false
	}
	sum = sum / 2
	dp := make([]bool, sum, sum)
	dp[0] = true
	for _, n := range nums {
		if n <= sum {
			if dp[sum-n] == true {
				return true
			}
			for j := sum - n - 1; j >= 0; j-- {
				if dp[j] == true {
					dp[j+n] = true
				}
			}
		}
	}
	return false
}