• LeetCode—— Partition Equal Subset Sum


    Question

    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.

    Solution

    动态规划,这其实是一个0-1背包问题,dp[i][j],i表示用第0~i个数是否可以组成值为j,dp[0][0] = true.

    Code

    class Solution {
    public:
        bool canPartition(vector<int>& nums) {
            int total = accumulate(nums.begin(), nums.end(), 0), target = total >> 1;
            vector<vector<bool> > dp(nums.size() + 1, vector<bool>(target + 1, false));
            if (total & 1)
                return false;
            
            for (int j = 0; j <= nums.size(); j++) {
                dp[j][0] = true;
            }
            for (int i = 1; i <= target; i++)
                dp[0][i] = false;
            
            
            for (int i = 1; i <= nums.size(); i++) {
                for (int j = 1; j <= target; j++) {
                    dp[i][j] = dp[i - 1][j];
                    if (j >= nums[i - 1])
                        dp[i][j] = dp[i][j] || dp[i - 1][j - nums[i - 1]];
                }
            }
            return dp[nums.size()][target];
        }
    };
    
  • 相关阅读:
    php 字符串查找
    php缓存与加速分析与汇总
    oracle 时间问题
    mysql数据迁移
    浅谈千万级PV/IP规模高性能高并发网站架构
    对memcache分布式的一点理解
    美国程序员将工作廉价外包给中国公司遭解雇
    16个Linux服务器监控命令
    在yii中使用memcache
    Windows电脑快捷健大全
  • 原文地址:https://www.cnblogs.com/zhonghuasong/p/7517353.html
Copyright © 2020-2023  润新知