File tree Expand file tree Collapse file tree 1 file changed +59
-0
lines changed Expand file tree Collapse file tree 1 file changed +59
-0
lines changed Original file line number Diff line number Diff line change
1
+ // DP top-down tabulation
2
+ class Solution {
3
+ fun largestDivisibleSubset (nums : IntArray ): List <Int > {
4
+ val n = nums.size
5
+ nums.sort()
6
+ val dp = nums
7
+ .map { listOf (it) }
8
+ .toTypedArray()
9
+ var res = listOf<Int >()
10
+
11
+ for (i in n - 1 downTo 0 ) {
12
+ for (j in i + 1 until n) {
13
+ if (nums[j] % nums[i] == 0 ) {
14
+ val temp = listOf (nums[i]) + dp[j]
15
+ dp[i] = if (temp.size > dp[i].size) temp else dp[i]
16
+ }
17
+ }
18
+
19
+ res = if (dp[i].size > res.size) dp[i] else res
20
+ }
21
+
22
+ return res
23
+ }
24
+ }
25
+
26
+ // recursion + memoization
27
+ class Solution {
28
+ fun largestDivisibleSubset (nums : IntArray ): List <Int > {
29
+ val n = nums.size
30
+ nums.sort()
31
+ val dp = HashMap <Int , List <Int >>()
32
+
33
+ fun dfs (i : Int ): List <Int > {
34
+ if (i == n) return listOf ()
35
+ dp[i]?.let { return it }
36
+
37
+ var res = listOf (nums[i])
38
+ for (j in i + 1 until n) {
39
+ if (nums[j] % nums[i] == 0 ) {
40
+ val temp = listOf (nums[i]) + dfs(j)
41
+ if (temp.size > res.size)
42
+ res = temp
43
+ }
44
+ }
45
+
46
+ dp[i] = res
47
+ return res
48
+ }
49
+
50
+ var res = listOf<Int >()
51
+ for (i in nums.indices) {
52
+ val temp = dfs(i)
53
+ if (temp.size > res.size)
54
+ res = temp
55
+ }
56
+
57
+ return res
58
+ }
59
+ }
You can’t perform that action at this time.
0 commit comments