[LeetCode] 416. Partition Equal Subset Sum_Medium tag: backpack

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: 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.

这个实际上就是0,1背包的一个马甲题,可以看作背包的size是sum(nums) //2 如果能够被平分的话。

用dp[n + 1][背包size + 1] 去初始化dp

dp[i][j] = dp[i - 1][j] or dp[i - 1][j - nums[i - 1]] if j >= nums[i - 1] else dp[i - 1][j]     ( i = [1, n], j = [1, 背包size])

initial:

dp[i][0] = 0    (i = [0, n])

T: O(n * sum(nums))    S: O(n * sum(nums))

Code

class Solution:
    def canPartition(self, nums):
        n, s = len(nums), sum(nums)
        if s % 2: return False
        target = s // 2
        dp = [[False] * (target + 1) for _ in range(n + 1)]
        for i in range(n + 1):
            dp[i][0] = True
        for i in range(1, n + 1):
            for j in range(1, target + 1):
                dp[i][j] = dp[i - 1][j] or dp[i - 1][j - nums[i - 1]] if j >= nums[i - 1] else dp[i - 1][j]
            if j == target and dp[i][j]:
                return True
        return False

可用滚动数组将Space 优化为O(sum(nums))

原文地址:https://www.cnblogs.com/Johnsonxiong/p/11136141.html

时间: 2024-10-10 07:46:58

[LeetCode] 416. Partition Equal Subset Sum_Medium tag: backpack的相关文章

Leetcode 416. Partition Equal Subset Sum

416. Partition Equal Subset Sum 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 1

LN : leetcode 416 Partition Equal Subset Sum

lc 416 Partition Equal Subset Sum 416 Partition Equal Subset Sum 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 th

[动态规划] leetcode 416 Partition Equal Subset Sum

problem:https://leetcode.com/problems/partition-equal-subset-sum/ 经典背包问题.找到是否存在恰好装满sum / 2的物体,可以优化为1D的. class Solution { public: bool canPartition(vector<int>& nums) { int n = nums.size(); int sum = accumulate(nums.begin(), nums.end(), 0); if (s

416. Partition Equal Subset Sum

Problem statement: 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

LC 416. Partition Equal Subset Sum

题目 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 e

[LeetCode] Partition Equal Subset Sum 相同子集和分割

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: Both the array size and each of the array element will not exceed 100. Exam

LeetCode Partition Equal Subset Sum

原题链接在这里:https://leetcode.com/problems/partition-equal-subset-sum/description/ 题目: 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.

Partition Equal Subset Sum

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 exce

算法-Partition Equal Subset Sum(动态规划)

一直以来,动态规划是我的问题,今天看到了一道动态规划的题,做了好久,也思考了好久,借鉴别人的代码才把这个问题理解到. 题意: 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. 样例: Given nums = [