DP(动态规划求最大整除子集)-06-动态规划-最大整除子集
最大整除子集
给出一个由无重复的正整数组成的集合,找出其中最大的整除子集,子集中任意一对 (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]
1 class Solution { 2 public: 3 vector<int> largestDivisibleSubset(vector<int>& nums) { 4 if(nums.size() == 0||nums.size() == 1) 5 return nums; 6 sort(nums.begin(),nums.end()); 7 int n = nums.size(); 8 vector<int> ma; 9 vector<pair<int,int>>num; 10 for(int i = 0;i < n;i++){ 11 num.push_back(make_pair(1,-1)); 12 } 13 int maxnum = -1; 14 int maxi; 15 for(int i = 0;i < n;i++){ 16 for(int j = 0;j < i;j++){ 17 if(nums[i] % nums[j] == 0){ 18 if(num[i].first <= num[j].first){ 19 num[i].first = num[j].first; 20 num[i].first++; 21 num[i].second = j; 22 } 23 } 24 } 25 if(maxnum < num[i].first){ 26 maxnum = num[i].first; 27 maxi = i; 28 } 29 } 30 while(maxi != -1){ 31 ma.push_back(nums[maxi]); 32 maxi = num[maxi].second; 33 } 34 return ma; 35 } 36 };
可以的话,记得帮我点个推荐,然后收藏+关注哟