Skip to content

Commit aa55c87

Browse files
committed
Runtime: 6 ms (Top 95.21%) | Memory: 10.00 MB (Top 97.6%)
1 parent d8948ff commit aa55c87

File tree

1 file changed

+22
-18
lines changed

1 file changed

+22
-18
lines changed
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,27 @@
1+
// Runtime: 6 ms (Top 95.21%) | Memory: 10.00 MB (Top 97.6%)
2+
13
class Solution {
24
public:
3-
int solve(int n1,int n2,vector<int>& nums1, vector<int>& nums2,vector<vector<int>> &dp)
4-
{
5-
if(n1<0 || n2<0)
6-
return 0;
7-
8-
if(dp[n1][n2]!=-1)
9-
return dp[n1][n2];
10-
11-
if(nums1[n1]==nums2[n2])
12-
return dp[n1][n2]=1+solve(n1-1,n2-1,nums1,nums2,dp);
13-
14-
return dp[n1][n2]=max(solve(n1-1,n2,nums1,nums2,dp),solve(n1,n2-1,nums1,nums2,dp));
15-
}
16-
175
int maxUncrossedLines(vector<int>& nums1, vector<int>& nums2) {
18-
int n1=nums1.size(),n2=nums2.size();
19-
vector<vector<int>> dp(n1+1,vector<int>(n2+1,-1));
20-
21-
return solve(n1-1,n2-1,nums1,nums2,dp);
6+
int m = nums1.size(), n = nums2.size();
7+
if (m < n) {
8+
swap(nums1, nums2);
9+
swap(m, n);
10+
}
11+
vector<int> dp(n + 1);
12+
for (int i = 1; i <= m; i++) {
13+
int prev = 0;
14+
for (int j = 1; j <= n; j++) {
15+
int curr = dp[j];
16+
if (nums1[i-1] == nums2[j-1]) {
17+
dp[j] = prev + 1;
18+
} else {
19+
dp[j] = max(dp[j-1], curr);
20+
}
21+
prev = curr;
22+
}
23+
}
24+
return dp[n];
2225
}
2326
};
27+

0 commit comments

Comments
 (0)