题解 | #分割等和子集#

分割等和子集

http://www.nowcoder.com/practice/0b18d3e11c8f4c5b833d2a9a43fa7772

dp,先判断整个数组的和 s 是否能被 2 整除,若不可以直接返回 False 若可以,则设置 dp 数组,确定状态转移方程, 该问题类似 0-1 背包 dp 的长度 为 s // 2, 状态转移时,当前状态只能从其大于nums[i] 的状态转移得到

#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 
# @param nums int整型一维数组 
# @return bool布尔型
#
class Solution:
    def partition(self , nums: List[int]) -> bool:
        # write code here
        s = sum(nums)
        if s % 2: return False
        s = s // 2
        dp = [False for _ in range(s + 1)]
        dp[0] = True
        for i in range(len(nums)):
            for j in range(s, nums[i] - 1, -1):
                dp[j] = dp[j] or dp[j - nums[i]]
        return dp[-1]
全部评论

相关推荐

不愿透露姓名的神秘牛友
07-11 11:16
点赞 评论 收藏
分享
Yki_:你要算时间成本呀,研究生两三年,博士三四年,加起来就五六年了,如果你本科去腾讯干五年,多领五年的年薪,加上公司内涨薪,可能到时候十五年总薪资也跟博士差不多
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务