java 368.最大的可分子集(#1).java

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 368.最大的可分子集(#1).java相关的知识,希望对你有一定的参考价值。

class Solution {
    public List<Integer> largestDivisibleSubset(int[] nums) {
        List<Integer> res = new ArrayList<>();
        if (nums == null || nums.length < 1) return res;
        int len = nums.length;
        Arrays.sort(nums);
        int[] dp = new int[len];
        int[] pre = new int[len];
        int max = 1;
        int maxIdx = 0;
        dp[0] = 1;
        pre[0] = -1;
        for (int i = 1; i < len; i++) {
            pre[i] = -1;
            dp[i] = 1;
            for (int j = i - 1; j >= 0; j--) {
                if (nums[i] % nums[j] == 0) {
                    //dp[i] = Math.max(dp[i], dp[j] + 1);
                    if (dp[j] + 1 > dp[i]) {
                        pre[i] = j;
                        dp[i] = dp[j] + 1;
                    }
                }
            }
            if (dp[i] >= max) {
                max = dp[i];
                maxIdx = i;
            }
        }
        
        Integer[] ans = new Integer[max];
        while (maxIdx != -1) {
            ans[--max] = nums[maxIdx];
            maxIdx = pre[maxIdx];
        }
        
        return Arrays.asList(ans);
        
        
    }
}

以上是关于java 368.最大的可分子集(#1).java的主要内容,如果未能解决你的问题,请参考以下文章

368. 最大整除子集(序列dp)

leetcode368. Largest Divisible Subset

LeetCode 0368. 最大整除子集

如何更改剃刀中剑道网格的可分页消息?

百度云课程:老杜2020版Java零基础进阶368集(视频采用JDK13录制)

好课分享老杜2020版Java零基础进阶368集(视频采用JDK13录制)