点击打开链接
bool cmp(int a, int b)
{
return a>b;
}
class Solution {
public:
vector<int> largestDivisibleSubset(vector<int>& nums) {
vector<int> res;
if(nums.empty()) return res;
vector<int> dp(nums.size(), 1);
vector<int> parent(nums.size(), 0);
sort(nums.begin(), nums.end(), cmp);
for(int j=0; j<nums.size()-1; j++){
for(int i=j+1; i<nums.size(); i++){
if(nums[j]%nums[i]==0){
if(dp[i] <dp[j]+1){
dp[i] = dp[j]+1;
parent[i] = j;
}
}
}
}
int maxval =0;
int maxidx=0;
for (int i=0; i<nums.size();i++) {
if(dp[i]>maxval){
maxval = dp[i];
maxidx = i;
}
}
//存取结果,通过maxidx来一步步寻找所有的数
for(int i=0; i<maxval; i++){
res.push_back(nums[maxidx]);
maxidx = parent[maxidx];
}
return res;
}
};