From d4a8cf09eb5cc17bf7752c2ce83122919f58cc97 Mon Sep 17 00:00:00 2001 From: Libin YANG Date: Sun, 6 Apr 2025 08:01:27 +0800 Subject: [PATCH 1/5] Update README.md --- solution/0300-0399/0368.Largest Divisible Subset/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/solution/0300-0399/0368.Largest Divisible Subset/README.md b/solution/0300-0399/0368.Largest Divisible Subset/README.md index b3d3b284eedf3..20355ced2c7f8 100644 --- a/solution/0300-0399/0368.Largest Divisible Subset/README.md +++ b/solution/0300-0399/0368.Largest Divisible Subset/README.md @@ -141,7 +141,7 @@ class Solution { class Solution { public: vector largestDivisibleSubset(vector& nums) { - sort(nums.begin(), nums.end()); + ranges::sort(nums); int n = nums.size(); int f[n]; int k = 0; From 05718814ca186c8eacafbcd0b3d8a9033c3100a6 Mon Sep 17 00:00:00 2001 From: Libin YANG Date: Sun, 6 Apr 2025 08:02:00 +0800 Subject: [PATCH 2/5] Use `ranges::sort` in C++ example --- solution/0300-0399/0368.Largest Divisible Subset/README_EN.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/solution/0300-0399/0368.Largest Divisible Subset/README_EN.md b/solution/0300-0399/0368.Largest Divisible Subset/README_EN.md index dc4c6e2a9992c..bc6b581454333 100644 --- a/solution/0300-0399/0368.Largest Divisible Subset/README_EN.md +++ b/solution/0300-0399/0368.Largest Divisible Subset/README_EN.md @@ -129,7 +129,7 @@ class Solution { class Solution { public: vector largestDivisibleSubset(vector& nums) { - sort(nums.begin(), nums.end()); + ranges::sort(nums); int n = nums.size(); int f[n]; int k = 0; From eacc29acbd5a77d934b23e01e4dda24ee3551546 Mon Sep 17 00:00:00 2001 From: Libin YANG Date: Sun, 6 Apr 2025 08:02:12 +0800 Subject: [PATCH 3/5] Use `ranges::sort` for sorting vector --- solution/0300-0399/0368.Largest Divisible Subset/Solution.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/solution/0300-0399/0368.Largest Divisible Subset/Solution.cpp b/solution/0300-0399/0368.Largest Divisible Subset/Solution.cpp index 769a58dba948a..b6834c46b9c0a 100644 --- a/solution/0300-0399/0368.Largest Divisible Subset/Solution.cpp +++ b/solution/0300-0399/0368.Largest Divisible Subset/Solution.cpp @@ -1,7 +1,7 @@ class Solution { public: vector largestDivisibleSubset(vector& nums) { - sort(nums.begin(), nums.end()); + ranges::sort(nums); int n = nums.size(); int f[n]; int k = 0; From 67e182145d37c524d7525602cae2fc67e2024661 Mon Sep 17 00:00:00 2001 From: Libin YANG Date: Sun, 6 Apr 2025 08:05:18 +0800 Subject: [PATCH 4/5] Add TypeScript solution for Largest Divisible Subset --- .../0368.Largest Divisible Subset/README.md | 34 +++++++++++++++++++ .../README_EN.md | 34 +++++++++++++++++++ .../0368.Largest Divisible Subset/Solution.ts | 29 ++++++++++++++++ 3 files changed, 97 insertions(+) create mode 100644 solution/0300-0399/0368.Largest Divisible Subset/Solution.ts diff --git a/solution/0300-0399/0368.Largest Divisible Subset/README.md b/solution/0300-0399/0368.Largest Divisible Subset/README.md index 20355ced2c7f8..47911a1085d09 100644 --- a/solution/0300-0399/0368.Largest Divisible Subset/README.md +++ b/solution/0300-0399/0368.Largest Divisible Subset/README.md @@ -201,6 +201,40 @@ func largestDivisibleSubset(nums []int) (ans []int) { } ``` +#### TypeScript + +```ts +function largestDivisibleSubset(nums: number[]): number[] { + nums.sort((a, b) => a - b); + const n = nums.length; + const f: number[] = Array(n).fill(1); + let k = 0; + + for (let i = 0; i < n; ++i) { + for (let j = 0; j < i; ++j) { + if (nums[i] % nums[j] === 0) { + f[i] = Math.max(f[i], f[j] + 1); + } + } + if (f[k] < f[i]) { + k = i; + } + } + + let m = f[k]; + const ans: number[] = []; + for (let i = k; m > 0; --i) { + if (nums[k] % nums[i] === 0 && f[i] === m) { + ans.push(nums[i]); + k = i; + --m; + } + } + + return ans; +} +``` + diff --git a/solution/0300-0399/0368.Largest Divisible Subset/README_EN.md b/solution/0300-0399/0368.Largest Divisible Subset/README_EN.md index bc6b581454333..b7353ec5c95de 100644 --- a/solution/0300-0399/0368.Largest Divisible Subset/README_EN.md +++ b/solution/0300-0399/0368.Largest Divisible Subset/README_EN.md @@ -189,6 +189,40 @@ func largestDivisibleSubset(nums []int) (ans []int) { } ``` +#### TypeScript + +```ts +function largestDivisibleSubset(nums: number[]): number[] { + nums.sort((a, b) => a - b); + const n = nums.length; + const f: number[] = Array(n).fill(1); + let k = 0; + + for (let i = 0; i < n; ++i) { + for (let j = 0; j < i; ++j) { + if (nums[i] % nums[j] === 0) { + f[i] = Math.max(f[i], f[j] + 1); + } + } + if (f[k] < f[i]) { + k = i; + } + } + + let m = f[k]; + const ans: number[] = []; + for (let i = k; m > 0; --i) { + if (nums[k] % nums[i] === 0 && f[i] === m) { + ans.push(nums[i]); + k = i; + --m; + } + } + + return ans; +} +``` + diff --git a/solution/0300-0399/0368.Largest Divisible Subset/Solution.ts b/solution/0300-0399/0368.Largest Divisible Subset/Solution.ts new file mode 100644 index 0000000000000..1f73b5644ea8b --- /dev/null +++ b/solution/0300-0399/0368.Largest Divisible Subset/Solution.ts @@ -0,0 +1,29 @@ +function largestDivisibleSubset(nums: number[]): number[] { + nums.sort((a, b) => a - b); + const n = nums.length; + const f: number[] = Array(n).fill(1); + let k = 0; + + for (let i = 0; i < n; ++i) { + for (let j = 0; j < i; ++j) { + if (nums[i] % nums[j] === 0) { + f[i] = Math.max(f[i], f[j] + 1); + } + } + if (f[k] < f[i]) { + k = i; + } + } + + let m = f[k]; + const ans: number[] = []; + for (let i = k; m > 0; --i) { + if (nums[k] % nums[i] === 0 && f[i] === m) { + ans.push(nums[i]); + k = i; + --m; + } + } + + return ans; +} \ No newline at end of file From 344474771946c1eb5eda312a8eae4bf8482f9b8b Mon Sep 17 00:00:00 2001 From: Libin YANG Date: Sun, 6 Apr 2025 08:08:02 +0800 Subject: [PATCH 5/5] Add Rust solution for Largest Divisible Subset. --- .../0368.Largest Divisible Subset/README.md | 39 +++++++++++++++++++ .../README_EN.md | 39 +++++++++++++++++++ .../0368.Largest Divisible Subset/Solution.rs | 34 ++++++++++++++++ 3 files changed, 112 insertions(+) create mode 100644 solution/0300-0399/0368.Largest Divisible Subset/Solution.rs diff --git a/solution/0300-0399/0368.Largest Divisible Subset/README.md b/solution/0300-0399/0368.Largest Divisible Subset/README.md index 47911a1085d09..881d96ad06ea6 100644 --- a/solution/0300-0399/0368.Largest Divisible Subset/README.md +++ b/solution/0300-0399/0368.Largest Divisible Subset/README.md @@ -235,6 +235,45 @@ function largestDivisibleSubset(nums: number[]): number[] { } ``` +#### Rust + +```rust +impl Solution { + pub fn largest_divisible_subset(nums: Vec) -> Vec { + let mut nums = nums; + nums.sort(); + + let n = nums.len(); + let mut f = vec![1; n]; + let mut k = 0; + + for i in 0..n { + for j in 0..i { + if nums[i] % nums[j] == 0 { + f[i] = f[i].max(f[j] + 1); + } + } + if f[k] < f[i] { + k = i; + } + } + + let mut m = f[k]; + let mut ans = Vec::new(); + + for i in (0..=k).rev() { + if nums[k] % nums[i] == 0 && f[i] == m { + ans.push(nums[i]); + k = i; + m -= 1; + } + } + + ans + } +} +``` + diff --git a/solution/0300-0399/0368.Largest Divisible Subset/README_EN.md b/solution/0300-0399/0368.Largest Divisible Subset/README_EN.md index b7353ec5c95de..9fb8ce2e6d1a1 100644 --- a/solution/0300-0399/0368.Largest Divisible Subset/README_EN.md +++ b/solution/0300-0399/0368.Largest Divisible Subset/README_EN.md @@ -223,6 +223,45 @@ function largestDivisibleSubset(nums: number[]): number[] { } ``` +#### Rust + +```rust +impl Solution { + pub fn largest_divisible_subset(nums: Vec) -> Vec { + let mut nums = nums; + nums.sort(); + + let n = nums.len(); + let mut f = vec![1; n]; + let mut k = 0; + + for i in 0..n { + for j in 0..i { + if nums[i] % nums[j] == 0 { + f[i] = f[i].max(f[j] + 1); + } + } + if f[k] < f[i] { + k = i; + } + } + + let mut m = f[k]; + let mut ans = Vec::new(); + + for i in (0..=k).rev() { + if nums[k] % nums[i] == 0 && f[i] == m { + ans.push(nums[i]); + k = i; + m -= 1; + } + } + + ans + } +} +``` + diff --git a/solution/0300-0399/0368.Largest Divisible Subset/Solution.rs b/solution/0300-0399/0368.Largest Divisible Subset/Solution.rs new file mode 100644 index 0000000000000..cb9cbc00f9d5d --- /dev/null +++ b/solution/0300-0399/0368.Largest Divisible Subset/Solution.rs @@ -0,0 +1,34 @@ +impl Solution { + pub fn largest_divisible_subset(nums: Vec) -> Vec { + let mut nums = nums; + nums.sort(); + + let n = nums.len(); + let mut f = vec![1; n]; + let mut k = 0; + + for i in 0..n { + for j in 0..i { + if nums[i] % nums[j] == 0 { + f[i] = f[i].max(f[j] + 1); + } + } + if f[k] < f[i] { + k = i; + } + } + + let mut m = f[k]; + let mut ans = Vec::new(); + + for i in (0..=k).rev() { + if nums[k] % nums[i] == 0 && f[i] == m { + ans.push(nums[i]); + k = i; + m -= 1; + } + } + + ans + } +} \ No newline at end of file