给出一个由无重复的正整数组成的集合, 找出其中最大的整除子集, 子集中任意一对 (Si, Sj) 都要满足: Si % Sj = 0 或 Sj % Si = 0。
如果有多个目标子集,返回其中任何一个均可。
示例 1:
集合: [1,2,3]
结果: [1,2] (当然, [1,3] 也正确)
示例 2:
集合: [1,2,4,8]
结果: [1,2,4,8]
详见:https://leetcode.com/problems/largest-divisible-subset/description/
C++:
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; } };
参考:https://www.cnblogs.com/grandyang/p/5625209.html