File tree Expand file tree Collapse file tree 4 files changed +165
-4
lines changed
solution/0300-0399/0368.Largest Divisible Subset Expand file tree Collapse file tree 4 files changed +165
-4
lines changed Original file line number Diff line number Diff line change 53
53
<!-- 这里可写当前语言的特殊实现逻辑 -->
54
54
55
55
``` python
56
-
56
+ class Solution :
57
+ def largestDivisibleSubset (self , nums : List[int ]) -> List[int ]:
58
+ nums.sort()
59
+ n = len (nums)
60
+ f, p = [0 ] * n, [0 ] * n
61
+ for i in range (n):
62
+ l, pre = 1 , i
63
+ for j in range (n):
64
+ if nums[i] % nums[j] == 0 and f[j] + 1 > l:
65
+ l = f[j] + 1
66
+ pre = j
67
+ f[i] = l
68
+ p[i] = pre
69
+ max_len, max_index = 0 , 0
70
+ for i, v in enumerate (f):
71
+ if max_len < v:
72
+ max_len = v
73
+ max_index = i
74
+ ans = []
75
+ while len (ans) < max_len:
76
+ ans.append(nums[max_index])
77
+ max_index = p[max_index]
78
+ return ans[::- 1 ]
57
79
```
58
80
59
81
### ** Java**
60
82
61
83
<!-- 这里可写当前语言的特殊实现逻辑 -->
62
84
63
85
``` java
64
-
86
+ class Solution {
87
+ public List<Integer > largestDivisibleSubset (int [] nums ) {
88
+ Arrays . sort(nums);
89
+ int n = nums. length;
90
+ int [] f = new int [n], p = new int [n];
91
+ for (int i = 0 ; i < n; i++ ) {
92
+ int l = 1 , pre = i;
93
+ for (int j = 0 ; j < i; j++ ) {
94
+ if (nums[i] % nums[j] == 0 && f[j] + 1 > l) {
95
+ l = f[j] + 1 ;
96
+ pre = j;
97
+ }
98
+ }
99
+ f[i] = l;
100
+ p[i] = pre;
101
+ }
102
+ int maxLen = 0 , maxIndex = 0 ;
103
+ for (int i = 0 ; i < n; i++ ) {
104
+ if (f[i] > maxLen) {
105
+ maxLen = f[i];
106
+ maxIndex = i;
107
+ }
108
+ }
109
+ List<Integer > ans = new ArrayList<> ();
110
+ while (ans. size() < maxLen) {
111
+ ans. add(nums[maxIndex]);
112
+ maxIndex = p[maxIndex];
113
+ }
114
+ Collections . reverse(ans);
115
+ return ans;
116
+ }
117
+ }
65
118
```
66
119
67
120
### ** ...**
Original file line number Diff line number Diff line change 45
45
### ** Python3**
46
46
47
47
``` python
48
-
48
+ class Solution :
49
+ def largestDivisibleSubset (self , nums : List[int ]) -> List[int ]:
50
+ nums.sort()
51
+ n = len (nums)
52
+ f, p = [0 ] * n, [0 ] * n
53
+ for i in range (n):
54
+ l, pre = 1 , i
55
+ for j in range (n):
56
+ if nums[i] % nums[j] == 0 and f[j] + 1 > l:
57
+ l = f[j] + 1
58
+ pre = j
59
+ f[i] = l
60
+ p[i] = pre
61
+ max_len, max_index = 0 , 0
62
+ for i, v in enumerate (f):
63
+ if max_len < v:
64
+ max_len = v
65
+ max_index = i
66
+ ans = []
67
+ while len (ans) < max_len:
68
+ ans.append(nums[max_index])
69
+ max_index = p[max_index]
70
+ return ans[::- 1 ]
49
71
```
50
72
51
73
### ** Java**
52
74
53
75
``` java
54
-
76
+ class Solution {
77
+ public List<Integer > largestDivisibleSubset (int [] nums ) {
78
+ Arrays . sort(nums);
79
+ int n = nums. length;
80
+ int [] f = new int [n], p = new int [n];
81
+ for (int i = 0 ; i < n; i++ ) {
82
+ int l = 1 , pre = i;
83
+ for (int j = 0 ; j < i; j++ ) {
84
+ if (nums[i] % nums[j] == 0 && f[j] + 1 > l) {
85
+ l = f[j] + 1 ;
86
+ pre = j;
87
+ }
88
+ }
89
+ f[i] = l;
90
+ p[i] = pre;
91
+ }
92
+ int maxLen = 0 , maxIndex = 0 ;
93
+ for (int i = 0 ; i < n; i++ ) {
94
+ if (f[i] > maxLen) {
95
+ maxLen = f[i];
96
+ maxIndex = i;
97
+ }
98
+ }
99
+ List<Integer > ans = new ArrayList<> ();
100
+ while (ans. size() < maxLen) {
101
+ ans. add(nums[maxIndex]);
102
+ maxIndex = p[maxIndex];
103
+ }
104
+ Collections . reverse(ans);
105
+ return ans;
106
+ }
107
+ }
55
108
```
56
109
57
110
### ** ...**
Original file line number Diff line number Diff line change
1
+ class Solution {
2
+ public List <Integer > largestDivisibleSubset (int [] nums ) {
3
+ Arrays .sort (nums );
4
+ int n = nums .length ;
5
+ int [] f = new int [n ], p = new int [n ];
6
+ for (int i = 0 ; i < n ; i ++) {
7
+ int l = 1 , pre = i ;
8
+ for (int j = 0 ; j < i ; j ++) {
9
+ if (nums [i ] % nums [j ] == 0 && f [j ] + 1 > l ) {
10
+ l = f [j ] + 1 ;
11
+ pre = j ;
12
+ }
13
+ }
14
+ f [i ] = l ;
15
+ p [i ] = pre ;
16
+ }
17
+ int maxLen = 0 , maxIndex = 0 ;
18
+ for (int i = 0 ; i < n ; i ++) {
19
+ if (f [i ] > maxLen ) {
20
+ maxLen = f [i ];
21
+ maxIndex = i ;
22
+ }
23
+ }
24
+ List <Integer > ans = new ArrayList <>();
25
+ while (ans .size () < maxLen ) {
26
+ ans .add (nums [maxIndex ]);
27
+ maxIndex = p [maxIndex ];
28
+ }
29
+ Collections .reverse (ans );
30
+ return ans ;
31
+ }
32
+ }
Original file line number Diff line number Diff line change
1
+ class Solution :
2
+ def largestDivisibleSubset (self , nums : List [int ]) -> List [int ]:
3
+ nums .sort ()
4
+ n = len (nums )
5
+ f , p = [0 ] * n , [0 ] * n
6
+ for i in range (n ):
7
+ l , pre = 1 , i
8
+ for j in range (n ):
9
+ if nums [i ] % nums [j ] == 0 and f [j ] + 1 > l :
10
+ l = f [j ] + 1
11
+ pre = j
12
+ f [i ] = l
13
+ p [i ] = pre
14
+ max_len , max_index = 0 , 0
15
+ for i , v in enumerate (f ):
16
+ if max_len < v :
17
+ max_len = v
18
+ max_index = i
19
+ ans = []
20
+ while len (ans ) < max_len :
21
+ ans .append (nums [max_index ])
22
+ max_index = p [max_index ]
23
+ return ans [::- 1 ]
You can’t perform that action at this time.
0 commit comments