Leetcode 368. Largest Divisible Subset

先对数组进行排序,用动态规划的思想,dp[i]表示以nums[i]结尾的最长的divisible subset。

首先dp[0] = [nums[0]]

更新dp[i]时,如果num[i]为之前某个数num[j](j<i)的倍数,则存在以nums[i]结尾,长度为dp[j] + 1的divisible subset。遍历nums[0]...nums[i-1],找出以nums[i]结尾的最长divisible subset。

class Solution(object):
    def largestDivisibleSubset(self, nums):
        """
        :type nums: List[int]
        :rtype: List[int]
        """
        if len(nums) <= 1:
            return nums
        nums.sort()
        result = [nums[0]]
        dic = [[nums[0]]]
        for i in range(1, len(nums)):
            num = nums[i]
            temp = []
            for item in dic:
                if num % item[-1] == 0 and (len(item) + 1) > len(temp):
                    temp = item[:] + [num]
            if not temp:
                temp = [num]
            dic.append(temp)
            if len(temp) > len(result):
                result = temp
        return result
        

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值