代码随想录算法训练营第三十五天| 416. 分割等和子集

12 阅读1分钟

0 1 背包问题

416. 分割等和子集

相关链接:题目链接文章讲解 视频讲解

解题思路

代码实现

var canPartition = function(nums) {
    var sum =0;
      const n = nums.length;
    if (n < 2) {
        return false;
    }
    for(let i=0;i<nums.length;i++){
        sum +=nums[i];
    }
    var target = sum/2;

    if(Math.floor(target)  !== target){
        return false;
    }
    const dp = new Array(target+1).fill(0);
    dp[0] = 0;
    for(let i=0;i<nums.length;i++){
        for(let j=target;j>0;j--){
            if(j - nums[i] < 0){dp[j] = dp[j];}else{dp[j] = Math.max(dp[j], dp[j-nums[i]]+nums[i])};
        }
    }
    console.log(dp[target],target)
    return dp[target] === target;
};