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,374評論 0 1
  • 剛看到這個問題我就隱約回憶起了cs170時候學過的subset問題,然后我發現我完全不記得那個東西是怎么做的。【感...
    98Future閱讀 381評論 0 0
  • 這道題是一道變形題,可以變型到背包。 建立背包,表示是否可以拿到總和的一半。 注意,這道題不能變形到Presum,...
    stepsma閱讀 714評論 0 0
  • 1.端午回家的路上,爸爸告訴我八個字:不吭不卑,落落大方,希望我努力做到; 2.遇見的朋友都說我瘦了,是的,體重已...
    柚子幺幺閱讀 184評論 0 0
  • 好多東西都變掉了,味道都改了,可是我還是會去懷念去回憶,有人說過:“回憶過去就意味著現在的自己過得不好。”好像就是...
    不安現狀的尹小兔閱讀 194評論 0 0