(M)Dynamic Programming:368. Largest Divisible Subset
来源:互联网 发布:多益网络实力 编辑:程序博客网 时间:2024/06/03 21:35
不知道怎么存结果,看了大神的分析:
定义一个动态数组dp,其中dp[i]表示到数字nums[i]位置最大可整除的子集合的长度,还需要一个一维数组parent,来保存上一个能整除的数字的位置,两个整型变量mx和mx_idx分别表示最大子集合的长度和起始数字的位置,我们可以从后往前遍历数组,对于某个数字再遍历到末尾,在这个过程中,如果nums[j]能整除nums[i], 且dp[i] < dp[j] + 1的话,更新dp[i]和parent[i],如果dp[i]大于mx了,还要更新mx和mx_idx,最后循环结束后,我们来填res数字,根据parent数组来找到每一个数字。
class Solution {public: vector<int> largestDivisibleSubset(vector<int>& nums) { sort(nums.begin(), nums.end()); vector<int> dp(nums.size(), 0), parent(nums.size(), 0), res; int mx = 0, mx_idx = 0; for (int i = nums.size() - 1; i >= 0; --i) { for (int j = i; j < nums.size(); ++j) { if (nums[j] % nums[i] == 0 && dp[i] < dp[j] + 1) { dp[i] = dp[j] + 1; parent[i] = j; if (mx < dp[i]) { mx = dp[i]; mx_idx = i; } } } } for (int i = 0; i < mx; ++i) { res.push_back(nums[mx_idx]); mx_idx = parent[mx_idx]; } return res; }};
阅读全文
0 0
- (M)Dynamic Programming:368. Largest Divisible Subset
- 【leetcode】368. Largest Divisible Subset【M】【65】
- 368. Largest Divisible Subset
- 368. Largest Divisible Subset
- 368. Largest Divisible Subset
- 368. Largest Divisible Subset
- 368. Largest Divisible Subset
- 368. Largest Divisible Subset
- 368. Largest Divisible Subset**
- 368. Largest Divisible Subset
- 368. Largest Divisible Subset
- 368. Largest Divisible Subset
- 368. Largest Divisible Subset
- 368. Largest Divisible Subset
- 368. Largest Divisible Subset
- 368. Largest Divisible Subset
- 368. Largest Divisible Subset
- 368. Largest Divisible Subset
- 面向对象思考之类和对象的深入思考与理解,那些我们忽略的编程思想
- 输入输出挂模板
- The Unique MST POJ
- python自动化工具之pywinauto(二)
- JavaScript类型转换
- (M)Dynamic Programming:368. Largest Divisible Subset
- 插入排序
- IPC进程通信机制---------AIDL实战
- 第十二章 表单元素
- codeforces The Artful Expedient(数学思维题)
- kotlin学习笔记-2-基础语法
- hdu3440--SPFA建图
- 放弃时间的人,时间也会放弃他..
- HttpCore 前言