368. Largest Divisible Subset 发表于 2022-01-28 12345678910111213141516171819202122232425262728293031323334353637class Solution { public List<Integer> largestDivisibleSubset(int[] nums) { Arrays.sort(nums); // 不要忘记排序 int n = nums.length; // 定义 dp[i] 为以 nums[i] 结尾的最大整除子集的长度 int[] dp = new int[n]; int[] prevMap = new int[n]; // curr -> prev 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; }} Reference368. Largest Divisible Subset