[LeetCode416]Partition Equal Subset Sum

来源:互联网 发布:cc域名注册哪里便宜 编辑:程序博客网 时间:2024/05/21 21:54

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:

  1. Each of the array element will not exceed 100.
  2. The array size will not exceed 200.

Example 1:

Input: [1, 5, 11, 5]Output: trueExplanation: The array can be partitioned as [1, 5, 5] and [11].

Example 2:

Input: [1, 2, 3, 5]Output: falseExplanation: The array cannot be partitioned into equal sum subsets.

Subscribe to see which companies asked this question

使用动态规划的方法来解决这个问题,用布尔数组dp[i]表示能否用给定数组中的项求和得到i,能则为true,否则为false,得到状态转移方程为dp[j]=dp[j]||dp[j-nums[i]],代码如下:

class Solution {public:    bool canPartition(vector<int>& nums) {        int n=nums.size();        int sum=0;        for(int i=0;i<n;i++)        {            sum+=nums[i];        }        if(sum%2!=0)        return false;        bool dp[sum/2+1]={false};        dp[0]=true;        for(int i=0;i<n;i++)        {            for(int j=sum/2;j>=nums[i];j--)            {                dp[j]=dp[j]||dp[j-nums[i]];            }        }        return dp[sum/2];    }};


0 0
原创粉丝点击