LeetCode—368. Largest Divisible Subset
阿新 • • 發佈:2019-02-11
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; } }