1class Solution {2public:3int maxUncrossedLines(vector<int> &nums1, vector<int> &nums2) {4int m = nums1.size(), n = nums2.size();5if (m < n) {6swap(nums1, nums2);7swap(m, n);8}9vector<int> dp(n + 1);10for (int i = 1; i <= m; i++) {11int prev = 0;12for (int j = 1; j <= n; j++) {13int curr = dp[j];14if (nums1[i - 1] == nums2[j - 1]) {15dp[j] = prev + 1;16} else {17dp[j] = max(dp[j - 1], curr);18}19prev = curr;20}21}22return dp[n];23}24};