Skip to content

Commit d5bf00e

Browse files
authored
Create Largest Divisible Subset
1 parent 92a83d0 commit d5bf00e

File tree

1 file changed

+48
-0
lines changed

1 file changed

+48
-0
lines changed

Largest Divisible Subset

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
class Solution {
2+
public List<Integer> largestDivisibleSubset(int[] nums) {
3+
4+
List<Integer> subset = new ArrayList<>(nums.length);
5+
int max = 1, len = nums.length-1, pre = -1;
6+
7+
if (nums.length == 0)
8+
return subset;
9+
10+
if (nums.length == 1) {
11+
subset.add(nums[0]);
12+
return subset;
13+
}
14+
15+
Arrays.sort(nums);
16+
17+
int[] dp = new int[nums.length];
18+
for (int i = 0; i < nums.length; i++)
19+
dp[i] = 1;
20+
21+
for (int i = 0; i < nums.length; i++) {
22+
for (int j = 0; j < i; j++) {
23+
if (nums[i]%nums[j] == 0) {
24+
dp[i] = Math.max(dp[i], dp[j]+1);
25+
max = Math.max(max,dp[i]);
26+
}
27+
}
28+
}
29+
30+
while (max >= 1) {
31+
if (pre == -1) {
32+
if (dp[len] == max) {
33+
subset.add(nums[len]);
34+
pre = nums[len];
35+
max--;
36+
}
37+
} else {
38+
if (dp[len] == max && pre%nums[len] == 0) {
39+
subset.add(nums[len]);
40+
pre = nums[len];
41+
max--;
42+
}
43+
}
44+
len--;
45+
}
46+
return subset;
47+
}
48+
}

0 commit comments

Comments
 (0)