Skip to content

Commit 3444747

Browse files
authored
Add Rust solution for Largest Divisible Subset.
1 parent 67e1821 commit 3444747

File tree

3 files changed

+112
-0
lines changed

3 files changed

+112
-0
lines changed

solution/0300-0399/0368.Largest Divisible Subset/README.md

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -235,6 +235,45 @@ function largestDivisibleSubset(nums: number[]): number[] {
235235
}
236236
```
237237

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+
238277
<!-- tabs:end -->
239278

240279
<!-- solution:end -->

solution/0300-0399/0368.Largest Divisible Subset/README_EN.md

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -223,6 +223,45 @@ function largestDivisibleSubset(nums: number[]): number[] {
223223
}
224224
```
225225

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+
226265
<!-- tabs:end -->
227266

228267
<!-- solution:end -->
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
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+
}

0 commit comments

Comments
 (0)