All Downloads are FREE. Search and download functionalities are using the official Maven repository.

g0401_0500.s0416_partition_equal_subset_sum.Solution Maven / Gradle / Ivy

There is a newer version: 1.38
Show newest version
package g0401_0500.s0416_partition_equal_subset_sum;

// #Medium #Top_100_Liked_Questions #Array #Dynamic_Programming #Level_2_Day_13_Dynamic_Programming
// #Big_O_Time_O(n*sums)_Space_O(n*sums) #2022_12_29_Time_27_ms_(94.53%)_Space_41.8_MB_(95.29%)

/**
 * 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:**
 *
 * *   `1 <= nums.length <= 200`
 * *   `1 <= nums[i] <= 100`
**/
public class Solution {
    public boolean canPartition(int[] nums) {
        int sums = 0;
        for (int num : nums) {
            sums += num;
        }
        if (sums % 2 == 1) {
            return false;
        }
        sums /= 2;
        boolean[] dp = new boolean[sums + 1];
        dp[0] = true;
        for (int num : nums) {
            for (int sum = sums; sum >= num; sum--) {
                dp[sum] = dp[sum] || dp[sum - num];
            }
        }
        return dp[sums];
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy