代码随想录算法训练营第52天|300. 最长递增子序列,674. 最长连续递增序列, 718. 最长重复子数组

300. 最长递增子序列

class Solution {
public:
    int lengthOfLIS(vector& nums) {
        int n = (int)nums.size();
        if (n == 0) {
            return 0;
        }
        vector dp(n, 0);
        for (int i = 0; i < n; ++i) {
            dp[i] = 1;
            for (int j = 0; j < i; ++j) {
                if (nums[j] < nums[i]) {
                    dp[i] = max(dp[i], dp[j] + 1);
                }
            }
        }
        return *max_element(dp.begin(), dp.end());
    }
};

674. 最长连续递增序列

class Solution {
public:
    int findLengthOfLCIS(vector& nums) {
        int ans = 0;
        int n = nums.size();
        int start = 0;
        for (int i = 0; i < n; i++) {
            if (i > 0 && nums[i] <= nums[i - 1]) {
                start = i;
            }
            ans = max(ans, i - start + 1);
        }
        return ans;
    }
};

718. 最长重复子数组

class Solution {
public:
    int findLength(vector& A, vector& B) {
        int n = A.size(), m = B.size();
        vector> dp(n + 1, vector(m + 1, 0));
        int ans = 0;
        for (int i = n - 1; i >= 0; i--) {
            for (int j = m - 1; j >= 0; j--) {
                dp[i][j] = A[i] == B[j] ? dp[i + 1][j + 1] + 1 : 0;
                ans = max(ans, dp[i][j]);
            }
        }
        return ans;
    }
};

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