File tree 5 files changed +212
-3
lines changed
solution/0300-0399/0368.Largest Divisible Subset
5 files changed +212
-3
lines changed Original file line number Diff line number Diff line change @@ -141,7 +141,7 @@ class Solution {
141
141
class Solution {
142
142
public:
143
143
vector<int > largestDivisibleSubset(vector<int >& nums) {
144
- sort(nums.begin(), nums.end() );
144
+ ranges:: sort(nums);
145
145
int n = nums.size();
146
146
int f[ n] ;
147
147
int k = 0;
@@ -201,6 +201,79 @@ func largestDivisibleSubset(nums []int) (ans []int) {
201
201
}
202
202
```
203
203
204
+ #### TypeScript
205
+
206
+ ``` ts
207
+ function largestDivisibleSubset(nums : number []): number [] {
208
+ nums .sort ((a , b ) => a - b );
209
+ const n = nums .length ;
210
+ const f: number [] = Array (n ).fill (1 );
211
+ let k = 0 ;
212
+
213
+ for (let i = 0 ; i < n ; ++ i ) {
214
+ for (let j = 0 ; j < i ; ++ j ) {
215
+ if (nums [i ] % nums [j ] === 0 ) {
216
+ f [i ] = Math .max (f [i ], f [j ] + 1 );
217
+ }
218
+ }
219
+ if (f [k ] < f [i ]) {
220
+ k = i ;
221
+ }
222
+ }
223
+
224
+ let m = f [k ];
225
+ const ans: number [] = [];
226
+ for (let i = k ; m > 0 ; -- i ) {
227
+ if (nums [k ] % nums [i ] === 0 && f [i ] === m ) {
228
+ ans .push (nums [i ]);
229
+ k = i ;
230
+ -- m ;
231
+ }
232
+ }
233
+
234
+ return ans ;
235
+ }
236
+ ```
237
+
238
+ #### Rust
239
+
240
+ ``` rust
241
+ impl Solution {
242
+ pub fn largest_divisible_subset (nums : Vec <i32 >) -> Vec <i32 > {
243
+ let mut nums = nums ;
244
+ nums . sort ();
245
+
246
+ let n = nums . len ();
247
+ let mut f = vec! [1 ; n ];
248
+ let mut k = 0 ;
249
+
250
+ for i in 0 .. n {
251
+ for j in 0 .. i {
252
+ if nums [i ] % nums [j ] == 0 {
253
+ f [i ] = f [i ]. max (f [j ] + 1 );
254
+ }
255
+ }
256
+ if f [k ] < f [i ] {
257
+ k = i ;
258
+ }
259
+ }
260
+
261
+ let mut m = f [k ];
262
+ let mut ans = Vec :: new ();
263
+
264
+ for i in (0 ..= k ). rev () {
265
+ if nums [k ] % nums [i ] == 0 && f [i ] == m {
266
+ ans . push (nums [i ]);
267
+ k = i ;
268
+ m -= 1 ;
269
+ }
270
+ }
271
+
272
+ ans
273
+ }
274
+ }
275
+ ```
276
+
204
277
<!-- tabs: end -->
205
278
206
279
<!-- solution: end -->
Original file line number Diff line number Diff line change @@ -129,7 +129,7 @@ class Solution {
129
129
class Solution {
130
130
public:
131
131
vector<int > largestDivisibleSubset(vector<int >& nums) {
132
- sort(nums.begin(), nums.end() );
132
+ ranges:: sort(nums);
133
133
int n = nums.size();
134
134
int f[ n] ;
135
135
int k = 0;
@@ -189,6 +189,79 @@ func largestDivisibleSubset(nums []int) (ans []int) {
189
189
}
190
190
```
191
191
192
+ #### TypeScript
193
+
194
+ ``` ts
195
+ function largestDivisibleSubset(nums : number []): number [] {
196
+ nums .sort ((a , b ) => a - b );
197
+ const n = nums .length ;
198
+ const f: number [] = Array (n ).fill (1 );
199
+ let k = 0 ;
200
+
201
+ for (let i = 0 ; i < n ; ++ i ) {
202
+ for (let j = 0 ; j < i ; ++ j ) {
203
+ if (nums [i ] % nums [j ] === 0 ) {
204
+ f [i ] = Math .max (f [i ], f [j ] + 1 );
205
+ }
206
+ }
207
+ if (f [k ] < f [i ]) {
208
+ k = i ;
209
+ }
210
+ }
211
+
212
+ let m = f [k ];
213
+ const ans: number [] = [];
214
+ for (let i = k ; m > 0 ; -- i ) {
215
+ if (nums [k ] % nums [i ] === 0 && f [i ] === m ) {
216
+ ans .push (nums [i ]);
217
+ k = i ;
218
+ -- m ;
219
+ }
220
+ }
221
+
222
+ return ans ;
223
+ }
224
+ ```
225
+
226
+ #### Rust
227
+
228
+ ``` rust
229
+ impl Solution {
230
+ pub fn largest_divisible_subset (nums : Vec <i32 >) -> Vec <i32 > {
231
+ let mut nums = nums ;
232
+ nums . sort ();
233
+
234
+ let n = nums . len ();
235
+ let mut f = vec! [1 ; n ];
236
+ let mut k = 0 ;
237
+
238
+ for i in 0 .. n {
239
+ for j in 0 .. i {
240
+ if nums [i ] % nums [j ] == 0 {
241
+ f [i ] = f [i ]. max (f [j ] + 1 );
242
+ }
243
+ }
244
+ if f [k ] < f [i ] {
245
+ k = i ;
246
+ }
247
+ }
248
+
249
+ let mut m = f [k ];
250
+ let mut ans = Vec :: new ();
251
+
252
+ for i in (0 ..= k ). rev () {
253
+ if nums [k ] % nums [i ] == 0 && f [i ] == m {
254
+ ans . push (nums [i ]);
255
+ k = i ;
256
+ m -= 1 ;
257
+ }
258
+ }
259
+
260
+ ans
261
+ }
262
+ }
263
+ ```
264
+
192
265
<!-- tabs: end -->
193
266
194
267
<!-- solution: end -->
Original file line number Diff line number Diff line change 1
1
class Solution {
2
2
public:
3
3
vector<int > largestDivisibleSubset (vector<int >& nums) {
4
- sort (nums. begin (), nums. end () );
4
+ ranges:: sort (nums);
5
5
int n = nums.size ();
6
6
int f[n];
7
7
int k = 0 ;
Original file line number Diff line number Diff line change
1
+ impl Solution {
2
+ pub fn largest_divisible_subset ( nums : Vec < i32 > ) -> Vec < i32 > {
3
+ let mut nums = nums;
4
+ nums. sort ( ) ;
5
+
6
+ let n = nums. len ( ) ;
7
+ let mut f = vec ! [ 1 ; n] ;
8
+ let mut k = 0 ;
9
+
10
+ for i in 0 ..n {
11
+ for j in 0 ..i {
12
+ if nums[ i] % nums[ j] == 0 {
13
+ f[ i] = f[ i] . max ( f[ j] + 1 ) ;
14
+ }
15
+ }
16
+ if f[ k] < f[ i] {
17
+ k = i;
18
+ }
19
+ }
20
+
21
+ let mut m = f[ k] ;
22
+ let mut ans = Vec :: new ( ) ;
23
+
24
+ for i in ( 0 ..=k) . rev ( ) {
25
+ if nums[ k] % nums[ i] == 0 && f[ i] == m {
26
+ ans. push ( nums[ i] ) ;
27
+ k = i;
28
+ m -= 1 ;
29
+ }
30
+ }
31
+
32
+ ans
33
+ }
34
+ }
Original file line number Diff line number Diff line change
1
+ function largestDivisibleSubset ( nums : number [ ] ) : number [ ] {
2
+ nums . sort ( ( a , b ) => a - b ) ;
3
+ const n = nums . length ;
4
+ const f : number [ ] = Array ( n ) . fill ( 1 ) ;
5
+ let k = 0 ;
6
+
7
+ for ( let i = 0 ; i < n ; ++ i ) {
8
+ for ( let j = 0 ; j < i ; ++ j ) {
9
+ if ( nums [ i ] % nums [ j ] === 0 ) {
10
+ f [ i ] = Math . max ( f [ i ] , f [ j ] + 1 ) ;
11
+ }
12
+ }
13
+ if ( f [ k ] < f [ i ] ) {
14
+ k = i ;
15
+ }
16
+ }
17
+
18
+ let m = f [ k ] ;
19
+ const ans : number [ ] = [ ] ;
20
+ for ( let i = k ; m > 0 ; -- i ) {
21
+ if ( nums [ k ] % nums [ i ] === 0 && f [ i ] === m ) {
22
+ ans . push ( nums [ i ] ) ;
23
+ k = i ;
24
+ -- m ;
25
+ }
26
+ }
27
+
28
+ return ans ;
29
+ }
You can’t perform that action at this time.
0 commit comments