zoukankan      html  css  js  c++  java
  • Leetcode: Partition Equal Subset Sum

    Given a non-empty array 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.
    
    Note:
    Each of the array element will not exceed 100.
    The array size will not exceed 200.
    Example 1:
    
    Input: [1, 5, 11, 5]
    
    Output: true
    
    Explanation: The array can be partitioned as [1, 5, 5] and [11].
    Example 2:
    
    Input: [1, 2, 3, 5]
    
    Output: false
    
    Explanation: The array cannot be partitioned into equal sum subsets.

    Backpack problem: dp[i][j] means if the first i elements can sum up to value j

    dp[i][j] = dp[i-1][j] || (j>=nums[i-1] && dp[i-1][j-nums[i-1]])

    the result is if the half sum of the array can be summed up by elements in the array

     1 public class Solution {
     2     public boolean canPartition(int[] nums) {
     3         if (nums.length == 0) return true;
     4         int volume = 0;
     5         for (int num : nums) {
     6             volume += num;
     7         }
     8         if (volume % 2 == 1) return false;
     9         volume /= 2;
    10         boolean[] dp = new boolean[volume+1];
    11         dp[0] = true;
    12         for (int i=1; i<=nums.length; i++) {
    13             for (int j=volume; j>=0; j--) {
    14                 dp[j] = dp[j] || (j>=nums[i-1] && dp[j-nums[i-1]]);
    15             }
    16         }
    17         return dp[volume];
    18     }
    19 }
  • 相关阅读:
    Spring核心概念
    机器学习第二次作业
    机器学习第一次作业
    软工实践个人总结
    第04组 Beta版本演示
    第04组 Beta冲刺(5/5)
    第04组 Beta冲刺(4/5)
    第04组 Beta冲刺(3/5)
    第04组 Beta冲刺(2/5)
    第04组 Beta冲刺(1/5)
  • 原文地址:https://www.cnblogs.com/EdwardLiu/p/6128118.html
Copyright © 2011-2022 走看看