1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| class Solution { public List<Integer> largestDivisibleSubset(int[] nums) { Arrays.sort(nums);
int n = nums.length;
int[] dp = new int[n]; int[] prevMap = new int[n];
int maxLength = 1; int endIndex = 0; for (int i = 0; i < n; i++) { dp[i] = 1; int prevIndex = i; for (int j = 0; j < i; j++) { if (nums[i] % nums[j] == 0 && dp[j] + 1 > dp[i]) { dp[i] = dp[j] + 1; prevIndex = j; } } prevMap[i] = prevIndex;
if (dp[i] > maxLength) { maxLength = dp[i]; endIndex = i; } }
List<Integer> resultList = new ArrayList<>(); for (int i = 0; i < maxLength; i++) { resultList.add(nums[endIndex]); endIndex = prevMap[endIndex]; } return resultList; } }
|
References
368. Largest Divisible Subset