给你一个由 无重复 正整数组成的集合 nums
,请你找出并返回其中最大的整除子集 answer
,子集中每一元素对 (answer[i], answer[j])
都应当满足:
answer[i] % answer[j] == 0
,或answer[j] % answer[i] == 0
如果存在多个有效解子集,返回其中任何一个均可。
示例 1:
输入:nums = [1,2,3]
输出:[1,2]
解释:[1,3] 也会被视为正确答案。
示例 2:
输入:nums = [1,2,4,8]
输出:[1,2,4,8]
提示:
1 <= nums.length <= 1000
1 <= nums[i] <= 2 * 109
nums
中的所有整数 互不相同
//leetcode submit region begin(Prohibit modification and deletion)
class Solution {
public List<Integer> largestDivisibleSubset(int[] nums) {
Arrays.sort(nums);
List<List<Integer>> dp = new ArrayList<>();
List<Integer> first = new ArrayList<>();
first.add(nums[0]);
dp.add(first);
for (int i = 1; i < nums.length; i++) {
int maxIndex = -1;
for (int j = 0; j < i; j++) {
if (nums[i] % nums[j] == 0 && (maxIndex == -1 || dp.get(j).size() > dp.get(maxIndex).size())) {
maxIndex = j;
}
}
List<Integer> curList = new ArrayList<>();
if (maxIndex == -1) {
curList.add(nums[i]);
} else {
curList.addAll(dp.get(maxIndex));
curList.add(nums[i]);
}
dp.add(curList);
}
int maxIndex = 0;
for (int i = 1; i < nums.length; i++) {
if (dp.get(i).size() > dp.get(maxIndex).size()) {
maxIndex = i;
}
}
return dp.get(maxIndex);
}
}
//leetcode submit region end(Prohibit modification and deletion)