File tree Expand file tree Collapse file tree 5 files changed +212
-3
lines changed
solution/0300-0399/0368.Largest Divisible Subset Expand file tree Collapse file tree 5 files changed +212
-3
lines changed Original file line number Diff line number Diff line change @@ -141,7 +141,7 @@ class Solution {
141141class Solution {
142142public:
143143 vector<int > largestDivisibleSubset(vector<int >& nums) {
144- sort(nums.begin(), nums.end() );
144+ ranges:: sort(nums);
145145 int n = nums.size();
146146 int f[ n] ;
147147 int k = 0;
@@ -201,6 +201,79 @@ func largestDivisibleSubset(nums []int) (ans []int) {
201201}
202202```
203203
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+
204277<!-- tabs: end -->
205278
206279<!-- solution: end -->
Original file line number Diff line number Diff line change @@ -129,7 +129,7 @@ class Solution {
129129class Solution {
130130public:
131131 vector<int > largestDivisibleSubset(vector<int >& nums) {
132- sort(nums.begin(), nums.end() );
132+ ranges:: sort(nums);
133133 int n = nums.size();
134134 int f[ n] ;
135135 int k = 0;
@@ -189,6 +189,79 @@ func largestDivisibleSubset(nums []int) (ans []int) {
189189}
190190```
191191
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+
192265<!-- tabs: end -->
193266
194267<!-- solution: end -->
Original file line number Diff line number Diff line change 11class Solution {
22public:
33 vector<int > largestDivisibleSubset (vector<int >& nums) {
4- sort (nums. begin (), nums. end () );
4+ ranges:: sort (nums);
55 int n = nums.size ();
66 int f[n];
77 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