代码随想录算法训练营第42天| 01 背包问题,416. 分割等和子集

链接: 01 背包问题 二维数组
链接: 01 背包问题 一维数组
链接: 416. 分割等和子集

416. 分割等和子集

这道题很懵,可能需要重做

class Solution {
    public boolean canPartition(int[] nums) {
           if(nums.length == 1) return false;
        
           int sum = 0;
           for(int x : nums){
              sum += x;
           }

           if(sum%2 != 0) return false;

           int target = sum/2;
           int[] dp = new int[target + 1];

           for(int i = 0; i < nums.length; i++){ // 先遍历物品
               for(int j = target; j >= nums[i]; j-- ){ // 再倒着遍历背包
                   dp[j] = Math.max(dp[j],dp[j - nums[i]] + nums[i]);
               }
                if(dp[target] == target) return true;
           }

          return dp[target] == target;

    }
}

你可能感兴趣的:(算法,数据结构,leetcode)