Partition Equal Subset Sum

题目来源
给一个数组,问能否把数组切分为两组,这两组元素的和是一样的。
想着就应该用dp,然后没想到怎么用,然后又看了下答案…其实也是蛮简单的一道题。
首先求出数组和,若和为奇数,则false,否则求出sum的一半,进行遍历。dp数组存储的是数组中能否有元素和等于该索引,遍历一遍元素,然后每次遍历到某个元素的时候都更新dp数组。

class Solution {
public:
    bool canPartition(vector<int>& nums) {
        int sum = accumulate(nums.begin(), nums.end(), 0);
        if (sum & 1 == 1)
            return false;
        int target = sum >> 1, n = nums.size();
        vector<int> dp(target+1, 0);
        dp[0] = 1;
        for (auto num : nums)
            for (int i=target; i>=num; i--)
                dp[i] = dp[i] || dp[i-num];
        return dp[target];
    }
};
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • My code: reference:https://discuss.leetcode.com/topic/623...
    Richardo92阅读 1,375评论 0 1
  • 刚看到这个问题我就隐约回忆起了cs170时候学过的subset问题,然后我发现我完全不记得那个东西是怎么做的。【感...
    98Future阅读 381评论 0 0
  • 这道题是一道变形题,可以变型到背包。 建立背包,表示是否可以拿到总和的一半。 注意,这道题不能变形到Presum,...
    stepsma阅读 714评论 0 0
  • 1.端午回家的路上,爸爸告诉我八个字:不吭不卑,落落大方,希望我努力做到; 2.遇见的朋友都说我瘦了,是的,体重已...
    柚子幺幺阅读 184评论 0 0
  • 好多东西都变掉了,味道都改了,可是我还是会去怀念去回忆,有人说过:“回忆过去就意味着现在的自己过得不好。”好像就是...
    不安现状的尹小兔阅读 195评论 0 0