zoukankan      html  css  js  c++  java
  • 【leetcode】368. Largest Divisible Subset

    题目如下:

    解题思路:leetcode里面有很多这样类似的题目,本题是求能够整除的,还有求依次递增的,一增一减的等等,都是万变不离其宗。对于这一类题目,我都是采用动态规划的算法。这题怎么解呢?首先对nums按升序排序,然后创建一个dp数组,dp[i]表示从nums[0]~nums[i]区间符合题目条件的子集的最大长度(注意,子集中nums[i]是必定包含的),里面的每个元素赋初始值为1。那个我们很容易可以得到递推表达式:在j = [0,i-1]区间内,得到满足nums[i] % nums[j] 条件的max{dp[j]},那么dp[i] = dp[j] + 1。同时,因为题目要求的不是输出最大长度,而是输出最大子集,因此,再用一个数组记录遍历过程中符合条件的子集即可。

    代码如下:

    class Solution(object):
        def largestDivisibleSubset(self, nums):
            """
            :type nums: List[int]
            :rtype: List[int]
            """
            if len(nums) == 0:
                return []
            nums.sort()
            dp = [1 for i in xrange(len(nums))]
            val = [[i] for i in nums]  #记录所有符合条件的子集
            maxInx = 0
            maxV = 0
            for i, v in enumerate(dp):
                for j in xrange(0, i):
                    if nums[i] % nums[j] == 0:
                        if dp[i] < dp[j] + 1:
                            l = val[j][:]
                            l.append(nums[i])
                            val[i] = l
                            dp[i] = dp[j] + 1
                            if maxV < len(val[i]):
                                maxInx = i
                                maxV = len(val[i])
            return val[maxInx]
  • 相关阅读:
    Mesos以及Marathon安装总结
    Mesos的quorum配置引发的问题
    chronoy & NTP
    /boot下面文件说明
    jquery插件
    不错的源码演示:admin5源码
    dos中执行cd命令切换不到对应的盘解决方法
    ThinkPHP重写规则优化URL及Rewrite规则详细说明
    PHP实现MySQL数据导出为EXCEL(CSV格式)
    php中常用$_SERVER的用法
  • 原文地址:https://www.cnblogs.com/seyjs/p/8878639.html
Copyright © 2011-2022 走看看