368-Largest-Divisible-Subset
0x0 题目详情
0x1 解题思路
0x2 代码实现
class Solution {
public List<Integer> largestDivisibleSubset(int[] nums) {
LinkedList<Integer> result=new LinkedList<>();
if(nums==null || nums.length==0){
return result;
}
Arrays.sort(nums);
int[] dp=new int[nums.length];
int[] pre=new int[nums.length];
dp[0]=1;
pre[0]=-1;
int point=0;
int right=0;
for(int i=1;i<nums.length;i++){
dp[i]=1;
pre[i]=-1;
for(int j=i-1;j>-1;j--){
if(nums[i]%nums[j]==0){
dp[i]=Math.max(dp[i],1+dp[j]);
//i的前缀只能是使得dp[i]更大的位置j
pre[i]=dp[i]==1+dp[j]?j:pre[i];
}
}
point=dp[i]>dp[point]?i:point;
}
while(pre[point]!=-1){
result.offerFirst(nums[point]);
point=pre[point];
}
result.offerFirst(nums[point]);
return result;
}
}0x3 课后总结
Last updated