Skip to content

Commit eef5794

Browse files
authored
feat: add solutions to lc problem: No.0368 (#4330)
1 parent b81ce02 commit eef5794

File tree

5 files changed

+212
-3
lines changed

5 files changed

+212
-3
lines changed

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

+74-1
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,7 @@ class Solution {
141141
class Solution {
142142
public:
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 -->

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

+74-1
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,7 @@ class Solution {
129129
class Solution {
130130
public:
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 -->

solution/0300-0399/0368.Largest Divisible Subset/Solution.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
class Solution {
22
public:
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 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+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
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+
}

0 commit comments

Comments
 (0)