LeetCode 368. 最大整除子集
题目描述
给你一个由 无重复 正整数组成的集合 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] 也会被视为正确答案。
1 <= nums.length <= 1000
1 <= nums[i] <= 2 * 109
nums 中的所有整数 互不相同
一、解题关键词
无重复 正整数
二、解题报告
1.思路分析
2.时间复杂度
3.代码示例
class Solution {
public List<Integer> largestDivisibleSubset(int[] nums) {
int len = nums.length;
Arrays.sort(nums);
//找出最大子集个数
int [] dp = new int[len];
Arrays.fill(dp,1);
int maxSize = 1;
int maxVal = dp[0];
for(int i = 1; i < len;i++){
for(int j = 0;j < i;j++){
//没有元素重复
if(nums[i] % nums[j] == 0){
dp[i] = Math.max(dp[i] , dp[j]+ 1);
}
}
if(dp[i] > maxSize){
maxSize = dp[i];
maxVal = nums[i];
}
}
List<Integer> res = new ArrayList<>();
if(maxSize == 1){
res.add(nums[0]);
return res;
}
for(int i = len - 1;i >= 0 && maxSize > 0;i--){
if(dp[i] == maxSize && maxVal % nums[i] == 0){
res.add(nums[i]);
maxVal = nums[i];
maxSize--;
}
}
return res;
}
}
2.知识点
本文探讨了如何解决LeetCode中的368题——最大整除子集问题,通过排序和动态规划方法求解,同时分析了算法的时间复杂度,并提供了代码示例。关键知识点包括整数除法、子集优化和动态规划技巧。
1003

被折叠的 条评论
为什么被折叠?



