【Leetcode】416-Partition Equal Subset Sum -- javascript解法 01背包问题

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.

给定一个数组,问,有没有一种分法,将数组分成两个和相等的部分。

思路:
        1.即在数组中查找一些数字,和为总和的一半。
        2.如果总和为奇数,则不可能分成题目要求。
        3.接下来是算法的核心。
        4.以前做法:将从小到大排序,两个数组一边放一个的原则。总和小的那个数组得到即将要分配的数。但是这样往往得不到最优解。需要考虑到的细节,优化点太多。
5.动态规划中的背包0-1问题。
代码如下 :

function canPartition(nums){
    var sum = 0;
    var result = [];
    if(!nums || nums.length<2){return false;}
    nums.map(function(a){sum+=a});
    console.log(sum);
    if(sum%2){return false;}
    sum /= 2;

    result[0] = true;

    for(var i=1; i<=nums.length; i++){
        for(var j=sum; j>=nums[i-1];j--){
            result[j] = (result[j] || result[j-nums[i-1]])?true:false;
        }
        // console.log(result.map(function(a){return a?" true":"false"}).toString());
    } 
    return result[sum];
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值