给出一个由无重复的正整数组成的集合,找出其中最大的整除子集,子集中任意一对 (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]
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/largest-divisible-subset
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
重点 1.ArrayList型数组的创建: List []dp = new ArrayList[nums.length];
2.ArrayList变量的替代:/ArrayList list=new ArrayList<>();
list.addAll(dp[j]);
dp[i]=list;/
dp[i]=new ArrayList<>(dp[j]);
dp[i].add(nums[i]);
class Solution {
public List<Integer> largestDivisibleSubset(int[] nums) {
if (nums.length < 1)
return new ArrayList<>();
Arrays.sort(nums);
List<Integer> []dp = new ArrayList[nums.length];//创建arrayList型数组
for(int i=0;i<nums.length;i++) {
dp[i]=new ArrayList<>();
}
dp[0].add(nums[0]);
for (int i = 0; i < nums.length; i++) {
for (int j = 0; j < i; j++) {
if (nums[i] % nums[j] == 0&&dp[j].size()+1>dp[i].size()) {
/*ArrayList<Integer> list=new ArrayList<>();
list.addAll(dp[j]);
dp[i]=list;*/
dp[i]=new ArrayList<>(dp[j]);
dp[i].add(nums[i]);
}
}
if (dp[i].size() == 0) {
dp[i].add(nums[i]);
}
}
int max=0;
int cou=0;
for(int i=0;i<nums.length;i++) {
if(dp[i].size()>max) {
max=dp[i].size();
cou=i;
}
}
return dp[cou];
}
}