算法分析与设计第十一周:416. Partition Equal Subset Sum

思路:
1.对数组进行排序并取得数组的总和
2.从大到小对数组进行筛选
3.只要有一种可行方案即返回True

class Solution(object):
    def canPartition(self, nums):
        if len(nums) <= 1:
            return False

        sum1 = sum(nums)
        nums.sort()
        #若数组中最大值大于数组总和值的一半,则直接返回False
        if sum1 % 2 == 1 or nums[-1] > (sum1 >> 1):
            return False

        def rec(nums, size, val):
            if val == 0:
                return True
            yes = False
            #遍历搜索各种可能的组合
            for i in range(size - 1, -1, -1):
                if nums[i] <= val:
                     yes |= rec(nums[0:i] + nums[i + 1:], size - 1, val - nums[i])
                     if yes:
                         return True

            return yes
        #因为要将数组分为等值的两部分,所以传入数组总和的一半值
        return rec(nums, len(nums), sum1 >> 1)

不加中文注释时的代码效率:
不加中文注释时的代码效率

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值