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 }

 

如果你有任何疑问或新的想法,欢迎在下方评论。

posted @ 2017-03-23 15:05  陆小风不写代码  阅读(121)  评论(0编辑  收藏  举报