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:
Input: [1,2,3]
Output: [1,2] (of course, [1,3] will also be ok)
Example 2:
Input: [1,2,4,8]
Output: [1,2,4,8]
class Solution {
public List<Integer> largestDivisibleSubset(int[] nums) {
int n = nums.length;
int[] count = new int[n];
int[] pre = new int[n];
int index = -1;
int max = 0;
Arrays.sort(nums);
for(int i = 0; i < n; i++){
count[i] = 1;
pre[i] = -1;
for(int j = i-1; j >=0; j--){
if(nums[i] % nums[j] == 0){
if(count[j] + 1 > count[i]){
count[i] = count[j] + 1;
pre[i] = j;
}
}
}
if(count[i] > max){
max = count[i];
index = i;
}
}
List<Integer> res = new ArrayList<>();
while(index != -1){
res.add(nums[index]);
index = pre[index];
}
return res;
}
}