1. 程式人生 > >LeetCode—368. Largest Divisible Subset

LeetCode—368. Largest Divisible Subset

Largest Divisible Subset思路:好的方法肯定是動態規劃,然而並不知道怎麼獲得最後的陣列,我只能用動態規劃獲得長度,所以換了一種方法。

首先對nums進行排序操作,然後建立一個List<List<Integer>>,裡面裝所有符合條件的陣列,每次新來一個數,掃描整個list,跟每個list最後一個元素做整除比較,如果有符合條件的,選擇最長的一個進行復制,新增該元素,然後將list放進整個大list中

點此進入


public class Solution {
    public int[] largestDivisibleSubset(int[] nums) {
        Arrays.sort(nums);
        List<List<Integer>> sumList=new ArrayList<List<Integer>>();
        for (int i = 0; i < nums.length; i++) {
            int length=0;
            int index=-1;
            for (int j = 0; j < sumList.size(); j++) {
                if (sumList.get(j).size()>length&&nums[i]%sumList.get(j).get(sumList.get(j).size()-1)==0) {
                    index=j;
                    length=sumList.get(j).size();
                }
            }
            List<Integer> test=new ArrayList<Integer>();
            if (index!=-1) {
                test.addAll(sumList.get(index));
            }
            test.add(nums[i]);
            sumList.add(test);
        }
        int index=0;
        int length=0;
        for (int i = 0; i < sumList.size(); i++) {
            if (sumList.get(i).size()>length) {
                length=sumList.get(i).size();
                index=i;
            }
        }
        int[] ans=new int[length];
        for (int i = 0; i < length; i++) {
            ans[i]=sumList.get(index).get(i);
        }
        return ans;
    }
}