给你一个由 无重复 正整数组成的集合 nums ,请你找出并返回其中最大的整除子集 answer ,子集中每一元素对 (answer[i], answer[j]) 都应当满足:
answer[i] % answer[j] == 0 ,或
answer[j] % answer[i] == 0
如果存在多个有效解子集,返回其中任何一个均可。

示例 1:

输入:nums = [1,2,3]
输出:[1,2]
解释:[1,3] 也会被视为正确答案。
示例 2:

输入:nums = [1,2,4,8]
输出:[1,2,4,8]

提示:

1 <= nums.length <= 1000
1 <= nums[i] <= 2 * 109
nums 中的所有整数 互不相同

解题思路

从小到大进行排序,每次判断两个元素的整除关系时,只需要枚举前面元素,判断是否存在整除关系即可。
因为整除关系存在传递性,例如1,2,4,8,16,16整除8以外,同时也能整除能被8整除的元素(例如 1,2,4)
因此只需要一个一维数组记录当前元素能够整除元素的个数
状态转移方程为:

     for j,v:=range nums[:i] {//遍历前面元素if nums[i]%v==0&&dp[j]+1>dp[i]{//当前nums[j]可以被nums[i]整除dp[i]=dp[j]+1//因此与nums[j]有整除关系的,与nums[i]也存在相同的整除关系 //加一是因为与nums[i]与nums[j]也存在整除关系}}

代码

func largestDivisibleSubset(nums []int) []int {sort.Ints(nums)n := len(nums)dp := make([]int, n)for i:=range dp{dp[i]=1}maxS,maxV:=1,nums[0]for i := 1; i < n; i++ {for j,v:=range nums[:i] {if nums[i]%v==0&&dp[j]+1>dp[i]{dp[i]=dp[j]+1}}if dp[i]>maxS{maxS,maxV=dp[i],nums[i]}}var res []intif maxS==1{res=append(res,maxV)return res}for i := n-1; i >=0 ; i-- {if maxS>0&&maxV%nums[i]==0&&dp[i]==maxS{maxS--maxV=nums[i]res=append(res,maxV)}}return res}

leetcode 368. 最大整除子集(dp)相关推荐

  1. leetcode - 368. 最大整除子集

    解题思路:这一题如果是简单的求最长的整除子集的个数的话,是很简单的一个题目,但是题目要求返回最长的整除子集,这时候就得考虑使用更多的内存去存储更多的信息了.这道题使用两部分的容易去存储信息.dp[i] ...

  2. LeetCode 368. 最大整除子集(动态规划)

    题目描述 给出一个由无重复的正整数组成的集合,找出其中最大的整除子集,子集中任意一对 (Si,Sj) 都要满足:Si % Sj = 0 或 Sj % Si = 0. 如果有多个目标子集,返回其中任何一 ...

  3. leetcode 368. Largest Divisible Subset | 368. 最大整除子集(动态规划详解)

    题目 https://leetcode.com/problems/largest-divisible-subset/ 哎,动态规划对我来说仍然是玄学- 只要有动态规划,medium is harder ...

  4. leetcode 368

    思路: 首先想到是排序,因为题目说si%sj ==0 或者 sj%si==0,为了方便,可以升序排序,之后就可以只判断 si%sj(i>=j)就可以了 dp[i] 表示0-i满足题目要求(也就是 ...

  5. loj 300 [CTSC2017]吉夫特 【Lucas定理 + 子集dp】

    题目链接 loj300 题解 orz litble 膜完题解后,突然有一个简单的想法: 考虑到\(2\)是质数,考虑Lucas定理: \[{n \choose m} = \prod_{i = 1} { ...

  6. LeetCode 85. 最大矩形(DP/单调递增栈,难)

    文章目录 1. 题目 2. 解题 2.1 DP 2.2 单调递增栈 1. 题目 给定一个仅包含 0 和 1 的二维二进制矩阵,找出只包含 1 的最大矩形,并返回其面积. 示例: 输入: [[" ...

  7. LeetCode 221. 最大正方形(DP)

    文章目录 1. 题目信息 2. 解题 1. 题目信息 在一个由 0 和 1 组成的二维矩阵内,找到只包含 1 的最大正方形,并返回其面积. 示例: 来源:力扣(LeetCode) 链接:https:/ ...

  8. BZOJ 2560(子集DP+容斥原理)

    2560: 串珠子 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 757  Solved: 497 [Submit][Status][Discuss ...

  9. leetcode算法题--最大整除子集

    原题链接:https://leetcode-cn.com/problems/largest-divisible-subset/ 首先给数组排序,然后用动态规划 dp[i]表示以nums[i]结尾的序列 ...

最新文章

  1. Java线程池使用与原理
  2. Oracle Database 11.2.0.1(静默安装)
  3. number类型的数组
  4. alexnet 论文翻译
  5. python bs4模块_python爬虫之Beautifulsoup模块用法详解
  6. OCP之5 管理数据库存储结构
  7. 计算机图形学Web前端笔记-定位并移动到指定坐标点(two.js理论及实现)
  8. 5分钟制作Unity过场动画 | Timeline
  9. ipv6远程连接mysql_如何利用IPv6进行远程桌面连接
  10. Python自动化开发学习的第九周----线程、进程、协程
  11. 判断double_深入解析单例模式之懒汉模式---Double-Check及volatile关键字
  12. (我总结的实用主义)Loadrunner运行常见错误
  13. 软件技术方案模板_携手跨越,法本信息数字化解决方案赋能企业,共建数字未来...
  14. 倍福PLC使用Visualization功能实现可视化界面
  15. 塔菲克蓝牙适配器驱动_TAFIQ蓝牙适配器驱动下载
  16. android之仿朋友圈程序,Android仿微信朋友圈添加图片的实例代码
  17. windows10打开natapp.exe 报Error: oppen NUL: The system cannot find the file specified.
  18. fash 3D 游戏
  19. html5标签思维导图,HTML/HTML5 知识点思维导图
  20. 阿里云,AWS,HTTPS和企业支付宝配置

热门文章

  1. C++11 标准新特性:Defaulted 和 Deleted 函数
  2. 判断字符串出栈合法性
  3. Java面试2021,java黑马百度云
  4. 阿里P8亲自讲解!java中级开发工程师需要掌握的技能
  5. win10计算机磁盘图标,Win10 21H1怎么更换电脑磁盘的图标标识
  6. Use Vim as a Python IDE
  7. vsftp服务器搭建
  8. eclipse启动tomcat不能正常访问问题
  9. Ubuntu开发之旅一---安装初步
  10. Weblogic调试延长时间