LeetCode:Largest Divisible Subset
368. Largest Divisible Subset
Given a set of distinct positive integers, find the largest subset such that every pair (Si, Sj) of elements in this subset satisfies: Si % Sj = 0 or Sj % Si = 0.
If there are multiple solutions, return any subset is fine.
Example 1:
nums: [1,2,3] Result: [1,2] (of course, [1,3] will also be ok)
Example 2:
nums: [1,2,4,8] Result: [1,2,4,8]
思路:比较有趣的一个题目,首先排序后参考最长递增子序列就可以了。
1 bool isdiv(vector<int>&arr, int now) 2 { 3 for (int i = 0; i < arr.size(); i++) 4 if (now%arr[i] != 0) 5 return false; 6 return true; 7 } 8 vector<int> largestDivisibleSubset(vector<int>& nums) 9 { 10 vector<vector<int>>r; 11 vector<int>pos,e; 12 sort(nums.begin(), nums.end()); 13 int size = nums.size(); 14 if (size == 0) 15 return e; 16 e.push_back(nums[0]); 17 r.push_back(e); 18 for (int i = 1; i < size; i++) 19 { 20 int maxv = -1; 21 vector<int>t; 22 for (int j = 0; j < i; j++) 23 { 24 if (isdiv(r[j], nums[i]) && (int)r[j].size() > maxv) 25 { 26 maxv = r[j].size(); 27 t.clear(); 28 t = r[j]; 29 } 30 } 31 t.push_back(nums[i]); 32 r.push_back(t); 33 } 34 int maxi = 0; 35 int maxv = -1; 36 for (int i = 0; i < r.size(); i++) 37 { 38 if ((int)r[i].size()>maxv) 39 { 40 maxv = r[i].size(); 41 maxi = i; 42 } 43 } 44 return r[maxi]; 45 }
如果你有任何疑问或新的想法,欢迎在下方评论。