思路:

首先想到是排序,因为题目说si%sj ==0 或者 sj%si==0,为了方便,可以升序排序,之后就可以只判断 si%sj(i>=j)就可以了

dp[i] 表示0~i满足题目要求(也就是,每对数都可以整除)的最大集合。

dp状态方程式:

初始化dp[0...len] = 1;

if(nums[i]%nums[j]==0)    dp[i] = max(dp[j]+1)   (0<j<i)

代码如下:(代码中添加了逆序,但实际上是不需要的,因为题目要求是求一个最大集合

//
//  main.cpp
//  leetcode 368
//
//  Created by jzc on 2018/5/22.
//  Copyright © 2018年 jzc. All rights reserved.
//

#include <iostream>
#include <stdio.h>
#include <vector>
#include <algorithm>
using namespace std;
vector<int> largestDivisibleSubset(vector<int>& nums) {sort(nums.begin(),nums.end());vector<int> result;vector<int> dp(nums.size(),1);//表示前j个最大集合vector<int> temp;for(int i=0;i<nums.size();i++){int max =1;int k =i;for(int j=0;j<i;j++){if(nums[i]%nums[j]==0){if(dp[j]+1>max){max = dp[j]+1;k = j;}}}dp[i] =max;temp.push_back(k);}int max_len = 0;int max_pos = 0;for(int i=0;i<nums.size();i++){if(dp[i]>max_len){max_len = dp[i];max_pos = i;}}int pos=max_pos;while(pos>=0){result.push_back(nums[pos]);int pre = pos;pos = temp[pos];if(pre==pos)break;}reverse(result.begin(),result.end());for(int i=0;i<result.size();i++)cout<<result[i]<<endl;return result;
}
int main() {int a[6] = {2,3,2,4,4,8};vector<int> nums(a,a+6);largestDivisibleSubset(nums);return 0;
}

转载于:https://www.cnblogs.com/jzcbest1016/p/9073926.html

leetcode 368相关推荐

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

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

  2. Leetcode 368. Largest Divisible Subset

    题目 解法:dp 这道题目的关键在于想到一个subset在符合条件的情况下,如果另一个数字能够整除这个subset中最大的数字,证明这个数字能够被扩展到这个subset中,那么这就是一种子问题关系 将 ...

  3. leetcode 368. 最大整除子集(dp)

    给你一个由 无重复 正整数组成的集合 nums ,请你找出并返回其中最大的整除子集 answer ,子集中每一元素对 (answer[i], answer[j]) 都应当满足: answer[i] % ...

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

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

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

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

  6. LeetCode 1691. 堆叠长方体的最大高度(排序+最大上升子序DP)

    文章目录 1. 题目 2. 解题 2.1 暴力超时解 2.2 排序+最长上升子序 463 / 3709,前 12.5% 1240 / 9290,前13.3% 1. 题目 给你 n 个长方体 cuboi ...

  7. 动态规划应用--最长递增子序列 LeetCode 300

    文章目录 1. 问题描述 2. 解题思路 2.1 动态规划 2.2 二分查找 1. 问题描述 有一个数字序列包含n个不同的数字,如何求出这个序列中的最长递增子序列长度?比如2,9,3,6,5,1,7这 ...

  8. 数据结构与算法:05 Leetcode同步练习(一)

    Leetcode同步练习(一) 题目01:两数之和 题号:1 难度:简单 https://leetcode-cn.com/problems/two-sum/ 给定一个整数数组 nums 和一个目标值 ...

  9. 刻意练习:LeetCode实战 -- Task01. 两数之和

    背景 本篇图文是LSGO软件技术团队组织的 第二期基础算法(Leetcode)刻意练习训练营 的打卡任务.本期训练营采用分类别练习的模式,即选择了五个知识点(数组.链表.字符串.树.贪心算法),每个知 ...

最新文章

  1. idl结果显示窗口如何缩小_IDL操作步骤
  2. AI眼中的世界是什么样子?谷歌新研究找到了机器的视觉概念
  3. Spring_Hibernate整合准备
  4. 完成登录并生成JWT
  5. LeetCode 970. 强整数
  6. CSS中的URL_CSS中的URI
  7. ios如何看idfv_ios获取手机状态 idfa   idfv   网络类型   分辨率   获取运营商
  8. spring新注解说明
  9. windows时间服务器搭建
  10. iOS官方demo下载网站
  11. 程序员工具箱--我常用的工具
  12. 上海市职称英语计算机报名,全国职称计算机考试
  13. 逻辑学中的思维规律:同一律,不矛盾律,排中律,充足理由律
  14. 如何修改背景图片大小
  15. AD单片机九齐单片机NY8B062D SOP16九齐
  16. Golang publish module
  17. 2017年总结,2018的新目标
  18. python与seo实战课程下载_黑帽seo教程:SEO快排套路与SEO快排Python应用编程技术(零基础)...
  19. 苹果设置显示连接到服务器,iPhone升级更新至iOS9后显示连接到iCloud服务器错误现象的解决办法...
  20. 决策树和 K 近邻分类

热门文章

  1. Vue3+CLI4 使用Element-ui
  2. java frame linux_JAVA环境(下) - Android框架简介_Linux编程_Linux公社-Linux系统门户网站...
  3. markdown 图片居中_写作者必备技能:markdown 微信使用markdown
  4. 如何查看docker的内核版本_查看Linux内核版本的方法有几个?你也是这样操作吗?...
  5. 20200218:不同路径(leetcode62)
  6. 软件工程 c java的联系_软件工程—WC功能实现 (JAVA)
  7. 基于android对接百度地图搜索附近关键字列表展示并调用第三方地图应用打开导航(百度地图、高德地图)
  8. 关于上篇文章的okhttp中对于onFailure回调的异常捕获
  9. VB 设置控件边框颜色(如:List、Text、Picture)
  10. 百度又要开放哪些无人车新能力?“老司机”Apollo3.5要来了,市中心开车无压力...