LeetCode 416. 分割等和子集

2022-07-05  本文已影响0人  草莓桃子酪酪
题目

给你一个 只包含正整数的非空数组 nums 。请你判断是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。

例:
输入:nums = [1,5,11,5]
输出:true
解释:数组可以分割成 [1, 5, 5] 和 [11] 。

方法:动态规划

想要求得进行数组一分为二后是否存在两个子集使得他们他们的元素和相等,那么每个子集的元素和应为原数组元素和的一半

class Solution(object):
    def canPartition(self, nums):
        target = sum(nums)
        if target % 2 == 1:
            return False
        target //= 2
        dp = [0] * (target + 1)
        for i in range(len(nums)):
            for j in range(target, nums[i] - 1, -1):
                dp[j] = max(dp[j], dp[j-nums[i]] + nums[i])
        return target == dp[target]
相关知识
参考

代码相关:https://programmercarl.com/0416.%E5%88%86%E5%89%B2%E7%AD%89%E5%92%8C%E5%AD%90%E9%9B%86.html#_416-%E5%88%86%E5%89%B2%E7%AD%89%E5%92%8C%E5%AD%90%E9%9B%86
除法:https://m.php.cn/article/475783.html

上一篇 下一篇

猜你喜欢

热点阅读