代码随想录算法训练营第53天|1143. 最长公共子序列,1035. 不相交的线, 53. 最大子数组和

1143. 最长公共子序列

class Solution {
public:
    int longestCommonSubsequence(string text1, string text2) {
        int m = text1.length(), n = text2.length();
        vector> dp(m + 1, vector(n + 1));
        for (int i = 1; i <= m; i++) {
            char c1 = text1.at(i - 1);
            for (int j = 1; j <= n; j++) {
                char c2 = text2.at(j - 1);
                if (c1 == c2) {
                    dp[i][j] = dp[i - 1][j - 1] + 1;
                } else {
                    dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]);
                }
            }
        }
        return dp[m][n];
    }
};

1035. 不相交的线

class Solution {
public:
    int maxUncrossedLines(vector& nums1, vector& nums2) {
        int m = nums1.size(), n = nums2.size();
        vector> dp(m + 1, vector(n + 1));
        for (int i = 1; i <= m; i++) {
            int num1 = nums1[i - 1];
            for (int j = 1; j <= n; j++) {
                int num2 = nums2[j - 1];
                if (num1 == num2) {
                    dp[i][j] = dp[i - 1][j - 1] + 1;
                } else {
                    dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]);
                }
            }
        }
        return dp[m][n];
    }
};

53. 最大子数组和

class Solution {
public:
    int maxSubArray(vector& nums) {
        int pre = 0, maxAns = nums[0];
        for (const auto &x: nums) {
            pre = max(pre + x, x);
            cout << "pre: " << pre << endl;
            maxAns = max(maxAns, pre);
            cout << "maxAns: " << maxAns << endl;
        }
        return maxAns;
    }
};

你可能感兴趣的:(动态规划,算法)