[leetcode] 368. Largest Divisible Subset 解题报告

news/2025/1/15 17:51:03/

题目链接: https://leetcode.com/problems/largest-divisible-subset/

Given a set of distinct positive integers, find the largest subset such that every pair (Si, Sj) of elements in this subset satisfies: Si % Sj = 0.

If there are multiple solutions, return any subset is fine.

Example 1:

nums: [1,2,3]Result: [1,2] (of course, [1,3] will also be ok)

Example 2:

nums: [1,2,4,8]Result: [1,2,4,8]

思路: 可以用动态规划来解决. 为了使得问题可以转化为子问题, 最好将数组按照降序来排列, 然后当nums[j]%nums[i]==0的时候就可以得到一个状态转移方程dp[i] = max(dp[i], dp[j]+1), 因为数组按照降序排序, 所以nums[i] < nums[j],并且之前能够被nums[j]整除的数, 也必然能够别nums[i]整除, 这就保证了状态转移方程的正确性. 

他还要求找出最大结果, 所以我们还需要记录一下路径, 每一个数字, 我们记录一个第一个能够使其到达最大长度的父结点, 最后回溯一下即可.

代码如下:

class Solution {
public:vector<int> largestDivisibleSubset(vector<int>& nums) {if(nums.size() ==0) return {}; sort(nums.begin(), nums.end(), greater<int>());int len = nums.size(), curMax=1, k=0;vector<int> par(len), dp(len, 1), result;for(int i =0; i < len; i++) par[i] = i;for(int i =1; i < len; i++){for(int j =0; j < i; j++){if(nums[j]%nums[i]!=0) continue;if(dp[i] < dp[j]+1) par[i] = j, dp[i]=dp[j]+1;if(dp[i] > curMax) curMax = dp[i], k = i;}}while(par[k] != k){result.push_back(nums[k]);k = par[k];}result.push_back(nums[k]);return result;}
};



http://www.ppmy.cn/news/361678.html

相关文章

368-C++基础语法(1-10)

1、 在main执行之前和之后执行的代码可能是什么&#xff1f; 1.1 main函数执行之前 设置栈指针初始化静态static变量和global全局变量&#xff0c;即.data段的内容将未初始化部分的全局变量赋初值&#xff1a;数值型short&#xff0c;int&#xff0c;long等为0&#xff0c;bo…

飞础科热成像仪368产品性能应用介绍

FOTRIC 360系列拥有手自一体热像镜头&#xff0c;可随时切换一键快速自动对焦或手动调节&#xff1b;180可旋转镜头的设计&#xff0c;更易于瞄准和观察&#xff0c;能够应对各种观察角度&#xff0c;且长期使用不易疲劳。 屏幕采用5.5英寸OLED超高清触摸显示屏&#xff0c;能够…

358.com

358.com谁都不会相信这个域名就这样过期了。360创造了域名的神价&#xff0c;358.com会值多少&#xff1f;没人知道。可惜这位米主&#xff0c;怎么就忘记续费了呢&#xff1f;358.com&#xff0c;在删除之后被SnapNames平台抢注&#xff0c;据说最后竞拍价&#xff1a;1007088…

368-boost库和muduo库的安装(Ubuntu)

muduo库是基于boost开发的&#xff0c;所以需要先在Linux平台上安装boost库。 boost库的安装 Boost::asio还没有正式的成为C标准库&#xff0c;因此如果使用Boost::asio进行网络I/O编程&#xff0c;需要先在当前系统平台上&#xff08;linux&#xff09;安装boost库相关的头文…

力扣(LeetCode)368. 最大整除子集(2023.01.03)

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

【博客368】HTTP常见状态码

内容&#xff1a; 记录http常见状态码 5XX系列&#xff1a; 500 Internal Server Error 意味着所请求的服务器遇到意外的情况并阻止其执行请求。 这个错误代码是一个比较通用的“万能”响应代码。501 Not Implemented 请求的方法不被服务器支持&#xff0c;因此无法被处理。只…

leetcode.368. 最大整除子集----使用dp来进行哈希思想的映射便于求解

368. 最大整除子集 给你一个由 无重复 正整数组成的集合 nums &#xff0c;请你找出并返回其中最大的整除子集 answer &#xff0c;子集中每一元素对 (answer[i], answer[j]) 都应当满足&#xff1a; answer[i] % answer[j] 0 &#xff0c;或 answer[j] % answer[i] 0 如果存…

LeetCode——368. 最大整除子集(Largest Divisible Subset)[中等]——分析及代码(Java)

LeetCode——368. 最大整除子集[Largest Divisible Subset][中等]——分析及代码[Java] 一、题目二、分析及代码1. 动态规划&#xff08;1&#xff09;思路&#xff08;2&#xff09;代码&#xff08;3&#xff09;结果 三、其他 一、题目 给你一个由 无重复 正整数组成的集合…