【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];
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章