Description:
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.
Explanation:
Given nums = [1,2,3]
, return [1,2]
or [1,3]
Given nums = [1,2,4,8]
, return [1,2,4,8]
Solution:
Dynamic programming. Set up two arrays, one records the path, the other records the number.
public class Solution {
/**
* @param nums a set of distinct positive integers
* @return the largest subset
*/
public List<Integer> largestDivisibleSubset(int[] nums) {
// Write your code here
ArrayList<Integer> result = new ArrayList<Integer>();
if(nums == null || nums.length == 0){
return result;
}
Arrays.sort(nums);
int len = nums.length;
int[] count = new int[len];
Arrays.fill(count , 1);
int[] path = new int[len];
Arrays.fill(path , -1);
int max = 0;
for(int i = 0;i<len;i++){
for(int j = 0;j<i;j++){
if(nums[i]%nums[j] == 0 && count[j]+1 > count[i]){
count[i] = count[j] + 1;
path[i] = j;
}
}
if(count[i] > count[max]){
max = i;
}
}
for(int i = max;i >= 0;i = path[i]){
result.add(nums[i]);
}
return result;
}
}