Largest Divisible Subset

这题主要麻烦在于找出这个结果,因为DP是一种求可行性的算法而不是一种找出制定结果的算法,这里只能使用一个额外项来储备每一个位置为皆为的subset的上一个点是什么,最后用while循环一遍收了,另外此题的数组顺序是无序的,必须排序,时间复杂度是O(n^2),所以排序不构成影响

class Solution(object):
    def largestDivisibleSubset(self, nums):
        """
        :type nums: List[int]
        :rtype: List[int]
        """
        nums.sort()
        n = len(nums)
        dp = [[1, None] for _ in xrange(n)]

        maxCount, maxIndex = 0, None
        for i in xrange(n):
            for j in xrange(i):
                if nums[i] % nums[j] == 0:
                    if dp[j][0] + 1 > dp[i][0]:
                        dp[i] = [dp[j][0] + 1, j]
            if dp[i][0] > maxCount:
                maxCount = dp[i][0]        
                maxIndex = i

        result = []
        while maxIndex is not None:
            result = [nums[maxIndex]] + result
            maxIndex = dp[maxIndex][1]

        return result

results matching ""

    No results matching ""