368. Largest Divisible Subset

https://leetcode.com/problems/largest-divisible-subset/

用sort来固定条件,同时注意这个List<Integer>[]的用法,感觉很有用,除此之外思路其实蛮简单,所谓的接龙

class Solution {
    public List<Integer> largestDivisibleSubset(int[] nums) {
        //注意这一行的写法
        List<Integer>[] subset = new ArrayList[nums.length];
        Arrays.sort(nums);
        for (int i = 0; i < nums.length; i++) {
            subset[i] = new ArrayList<>();
            subset[i].add(nums[i]);
        }
        int max = 0;
        int idx = 0;
        for (int i = 1; i < nums.length; i++) {
            int maxsize = 0;
            int maxidx = -1;
            for (int j = i-1; j >= 0; j--) {
                if (nums[i] % nums[j] == 0) {
                    if (maxsize < subset[j].size()+1) {
                        maxsize = subset[j].size()+1;
                        maxidx = j;
                    }
                }
            }
            if (maxidx != -1) {
                subset[i].addAll(subset[maxidx]);
                if (max < subset[i].size()) {
                    max = subset[i].size();
                    idx = i;
                }
            }
        }
        return subset[idx];
    }
}

Last updated