368. 最大整除子集

 1 //最长上升子序列的变种
 2 class Solution 
 3 {
 4 public:
 5     vector<int> largestDivisibleSubset(vector<int>& nums) 
 6     {
 7         vector<int> ans;//保存结果
 8         if(nums.size() == 0) return ans;
 9         sort(nums.begin(),nums.end());//无重复+排序 = 严格单增
10         int n = nums.size();
11         int res = INT_MIN;
12         vector<int> dp(n,1);
13         vector<int> index;//保存最大值的下标
14         for(int i = 0;i < n;i ++)
15         {
16             for(int j = 0;j < i;j ++)
17             {
18                 if(dp[i] < dp[j] + 1 && nums[i] % nums[j] == 0) dp[i] = dp[j] + 1;
19             }
20             if(res < dp[i]) 
21             {
22                 res = dp[i];
23                 index.push_back(i);
24             }
25         }
26         for(auto a : index) ans.push_back(nums[a]);
27         return ans;
28     }
29 };

 

posted @ 2020-04-23 10:08  Jinxiaobo0509  阅读(188)  评论(0)    收藏  举报