Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
d3c3c60
feat: add solution for deleting duplicate folders in a file system
Speccy-Rom Jul 20, 2025
593e789
Merge pull request #1
Speccy-Rom Jul 20, 2025
8e85b73
feat: add minCost solution in Python and Go #3603
Jul 21, 2025
dc0b67e
Merge pull request #2
Speccy-Rom Jul 21, 2025
c2a47f5
feat: add solutions to lc problem: No.1948 (#4582)
yanglbme Jul 20, 2025
d64eda2
feat: add solutions to lc problem: No.3618 (#4583)
yanglbme Jul 20, 2025
a4d36fd
feat: add solutions to lc problem: No.3619 (#4586)
yanglbme Jul 20, 2025
89b27cf
feat: update solutions to lc problem: No.1957 (#4587)
yanglbme Jul 20, 2025
571a4d0
feat: add solutions to lc problem: No.3622 (#4588)
yanglbme Jul 20, 2025
f0362dc
Merge branch 'main' into main
Speccy-Rom Jul 22, 2025
80bf294
Merge branch 'main' into main
Speccy-Rom Jul 23, 2025
3a83873
Merge pull request #3
Speccy-Rom Jul 23, 2025
03892a9
Merge branch 'doocs:main' into main
Speccy-Rom Jul 23, 2025
cf601f4
feat: add minTime solutions in Python, C++, and Go for LC problem #3604
Jul 23, 2025
5ef355b
Merge branch 'main' into main
Speccy-Rom Jul 24, 2025
7a51de4
Merge branch 'main' into main
Speccy-Rom Jul 26, 2025
a723fb0
Merge branch 'main' into main
Speccy-Rom Jul 29, 2025
bfd23a2
Merge branch 'main' into main
Speccy-Rom Aug 5, 2025
3c71787
feat: add solutions for longest subsequence problem in Python, C++, G…
Sep 4, 2025
e63dc7c
Merge branch 'main' into add-solution-to-lc-problem-3409
Speccy-Rom Sep 4, 2025
ccda80c
feat: optimize longest subsequence solution in C++
Sep 4, 2025
e7515b8
feat: finalize solution implementation for LC problem #3409
Sep 4, 2025
9337da8
feat: finalize solution implementation for LC problem #3409
Sep 4, 2025
54b09ae
Merge branch 'main' into add-solution-to-lc-problem-3409
Speccy-Rom Sep 5, 2025
aba35fe
Merge branch 'main' into add-solution-to-lc-problem-3409
Speccy-Rom Sep 7, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -82,10 +82,28 @@ tags:

<!-- tabs:start -->

#### Python3

```python

class Solution:
def longestSubsequence(self, nums: List[int]) -> int:
mx = max(nums)
mn = min(nums)

diff = mx - mn
dp = [[0] * (diff + 1) for _ in range(mx + 1)]
ans = 0

for n in nums:
maxnum = 1
for i in range(diff, -1, -1):
if n + i <= mx and dp[n + i][i] + 1 > maxnum:
maxnum = dp[n + i][i] + 1
if n - i >= 0 and dp[n - i][i] + 1 > maxnum:
maxnum = dp[n - i][i] + 1

dp[n][i] = maxnum
ans = max(maxnum,ans)

return ans
```

#### Java
Expand All @@ -97,13 +115,105 @@ tags:
#### C++

```cpp

class Solution {
public:
int longestSubsequence(vector<int>& nums) {
const int mx = ranges::max(nums);
vector<vector<int>> dp(mx + 1, vector<int>(mx + 1));

for (const int num : nums) {
for (int prev = 1; prev <= mx; ++prev) {
const int diff = abs(num - prev);
dp[num][diff] = max(dp[num][diff], dp[prev][diff] + 1);
}
for (int j = mx - 1; j >= 0; --j)
dp[num][j] = max(dp[num][j], dp[num][j + 1]);
}

return ranges::max_element(dp, ranges::less{}, [](const vector<int>& row) {
return row[0];
})->at(0);
}
};
```

#### Go

```go
func longestSubsequence(nums []int) int {
mx, mn := nums[0], nums[0]
for _, v := range nums {
if v > mx {
mx = v
}
if v < mn {
mn = v
}
}
diff := mx - mn
dp := make([][]int, mx+1)
for i := range dp {
dp[i] = make([]int, diff+1)
}

ans := 0

for _, n := range nums {
maxnum := 1
for d := diff; d >= 0; d-- {
if n+d <= mx && dp[n+d][d]+1 > maxnum {
maxnum = dp[n+d][d] + 1
}
if n-d >= 0 && dp[n-d][d]+1 > maxnum {
maxnum = dp[n-d][d] + 1
}
dp[n][d] = maxnum
if maxnum > ans {
ans = maxnum
}
}
}

return ans
}
```

#### Rust

```rust
impl Solution {
pub fn longest_subsequence(nums: Vec<i32>) -> i32 {
let mx = *nums.iter().max().unwrap();
let mn = *nums.iter().min().unwrap();
let diff = (mx - mn) as usize;

let mut dp = vec![vec![0; diff + 1]; (mx + 1) as usize];

let mut ans = 0;

for &n in nums.iter() {
let n_usize = n as usize;
let mut maxnum = 1;

for d in (0..=diff).rev() {
if n_usize + d <= mx as usize {
if dp[n_usize + d][d] + 1 > maxnum {
maxnum = dp[n_usize + d][d] + 1;
}
}
if n_usize >= d {
if dp[n_usize - d][d] + 1 > maxnum {
maxnum = dp[n_usize - d][d] + 1;
}
}
dp[n_usize][d] = maxnum;
ans = ans.max(maxnum);
}
}

ans
}
}
```

<!-- tabs:end -->
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,27 @@ tags:
#### Python3

```python

class Solution:
def longestSubsequence(self, nums: List[int]) -> int:
mx = max(nums)
mn = min(nums)

diff = mx - mn
dp = [[0] * (diff + 1) for _ in range(mx + 1)]
ans = 0

for n in nums:
maxnum = 1
for i in range(diff, -1, -1):
if n + i <= mx and dp[n + i][i] + 1 > maxnum:
maxnum = dp[n + i][i] + 1
if n - i >= 0 and dp[n - i][i] + 1 > maxnum:
maxnum = dp[n - i][i] + 1

dp[n][i] = maxnum
ans = max(maxnum,ans)

return ans
```

#### Java
Expand All @@ -95,12 +115,106 @@ tags:
#### C++

```cpp

class Solution {
public:
int longestSubsequence(vector<int>& nums) {
const int mx = ranges::max(nums);
vector<vector<int>> dp(mx + 1, vector<int>(mx + 1));

for (const int num : nums) {
for (int prev = 1; prev <= mx; ++prev) {
const int diff = abs(num - prev);
dp[num][diff] = max(dp[num][diff], dp[prev][diff] + 1);
}
for (int j = mx - 1; j >= 0; --j)
dp[num][j] = max(dp[num][j], dp[num][j + 1]);
}

return ranges::max_element(dp, ranges::less{}, [](const vector<int>& row) {
return row[0];
})->at(0);
}
};
```

#### Go

```go
func longestSubsequence(nums []int) int {
mx, mn := nums[0], nums[0]
for _, v := range nums {
if v > mx {
mx = v
}
if v < mn {
mn = v
}
}
diff := mx - mn
dp := make([][]int, mx+1)
for i := range dp {
dp[i] = make([]int, diff+1)
}

ans := 0

for _, n := range nums {
maxnum := 1
for d := diff; d >= 0; d-- {
if n+d <= mx && dp[n+d][d]+1 > maxnum {
maxnum = dp[n+d][d] + 1
}
if n-d >= 0 && dp[n-d][d]+1 > maxnum {
maxnum = dp[n-d][d] + 1
}
dp[n][d] = maxnum
if maxnum > ans {
ans = maxnum
}
}
}

return ans
}
```

#### Rust

```rust
impl Solution {
pub fn longest_subsequence(nums: Vec<i32>) -> i32 {
let mx = *nums.iter().max().unwrap();
let mn = *nums.iter().min().unwrap();
let diff = (mx - mn) as usize;

let mut dp = vec![vec![0; diff + 1]; (mx + 1) as usize];

let mut ans = 0;

for &n in nums.iter() {
let n_usize = n as usize;
let mut maxnum = 1;

for d in (0..=diff).rev() {
if n_usize + d <= mx as usize {
if dp[n_usize + d][d] + 1 > maxnum {
maxnum = dp[n_usize + d][d] + 1;
}
}
if n_usize >= d {
if dp[n_usize - d][d] + 1 > maxnum {
maxnum = dp[n_usize - d][d] + 1;
}
}
dp[n_usize][d] = maxnum;
ans = ans.max(maxnum);
}
}

ans
}
}


```

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
#include <algorithm>
#include <ranges>
#include <vector>
using namespace std;
using namespace std::ranges;

class Solution {
public:
int longestSubsequence(vector<int>& nums) {
const int mx = max(nums);
vector<vector<int>> dp(mx + 1, vector<int>(mx + 1));

for (const int num : nums) {
for (int prev = 1; prev <= mx; ++prev) {
const int diff = abs(num - prev);
dp[num][diff] = max(dp[num][diff], dp[prev][diff] + 1);
}
for (int j = mx - 1; j >= 0; --j)
dp[num][j] = max(dp[num][j], dp[num][j + 1]);
}

return max_element(dp, less{}, [](const vector<int>& row) {
return row[0];
})->at(0);
}
};
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
func longestSubsequence(nums []int) int {
mx, mn := nums[0], nums[0]
for _, v := range nums {
if v > mx {
mx = v
}
if v < mn {
mn = v
}
}
diff := mx - mn
dp := make([][]int, mx+1)
for i := range dp {
dp[i] = make([]int, diff+1)
}

ans := 0

for _, n := range nums {
maxnum := 1
for d := diff; d >= 0; d-- {
if n+d <= mx && dp[n+d][d]+1 > maxnum {
maxnum = dp[n+d][d] + 1
}
if n-d >= 0 && dp[n-d][d]+1 > maxnum {
maxnum = dp[n-d][d] + 1
}
dp[n][d] = maxnum
if maxnum > ans {
ans = maxnum
}
}
}

return ans
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
from typing import List


class Solution:
def longestSubsequence(self, nums: List[int]) -> int:
mx = max(nums)
mn = min(nums)

diff = mx - mn
dp = [[0] * (diff + 1) for _ in range(mx + 1)]
ans = 0

for n in nums:
maxnum = 1
for i in range(diff, -1, -1):
if n + i <= mx and dp[n + i][i] + 1 > maxnum:
maxnum = dp[n + i][i] + 1
if n - i >= 0 and dp[n - i][i] + 1 > maxnum:
maxnum = dp[n - i][i] + 1

dp[n][i] = maxnum
ans = max(maxnum, ans)

return ans
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
impl Solution {
pub fn longest_subsequence(nums: Vec<i32>) -> i32 {
let mx = *nums.iter().max().unwrap();
let mn = *nums.iter().min().unwrap();
let diff = (mx - mn) as usize;

let mut dp = vec![vec![0; diff + 1]; (mx + 1) as usize];

let mut ans = 0;

for &n in nums.iter() {
let n_usize = n as usize;
let mut maxnum = 1;

for d in (0..=diff).rev() {
if n_usize + d <= mx as usize {
if dp[n_usize + d][d] + 1 > maxnum {
maxnum = dp[n_usize + d][d] + 1;
}
}
if n_usize >= d {
if dp[n_usize - d][d] + 1 > maxnum {
maxnum = dp[n_usize - d][d] + 1;
}
}
dp[n_usize][d] = maxnum;
ans = ans.max(maxnum);
}
}

ans
}
}
Loading