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

300.最长递增子序列

文章链接  |  题目链接  |  视频链接

C++解法

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

Python解法

class Solution:
    def lengthOfLIS(self, nums: List[int]) -> int:
        if len(nums) <= 1:
            return len(nums)
        dp = [1] * len(nums)
        result = 0
        for i in range(1, len(nums)):
            for j in range(0, i):
                if nums[i] > nums[j]:
                    dp[i] = max(dp[i], dp[j]+1)
            if dp[i] > result:
                result = dp[i]
        return result

674. 最长连续递增序列

文章链接  |  题目链接  |  视频链接

C++解法

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

Python解法

class Solution:
    def findLengthOfLCIS(self, nums: List[int]) -> int:
        if not nums:
            return 0
        max_length = 1
        current_length = 1
        for i in range(1, len(nums)):
            if nums[i] > nums[i-1]:
                current_length += 1
                max_length = max(max_length, current_length)
            else:
                current_length = 1
        return max_length

718. 最长重复子数组  

文章链接  |  题目链接  |  视频链接

C++解法

class Solution {
public:
    int findLength(vector& nums1, vector& nums2) {
        vector> dp (nums1.size() + 1, vector(nums2.size()+1, 0));
        int result = 0;
        for (int i = 1; i <= nums1.size(); i++){
            for (int j = 1; j <= nums2.size(); j++){
                if (nums1[i - 1] == nums2[j - 1]){
                    dp[i][j] = dp[i - 1][j - 1] + 1;
                }
                if (dp[i][j] > result) result = dp[i][j];
            }
        }
        return result;
    }
};

Python解法

class Solution:
    def findLength(self, nums1: List[int], nums2: List[int]) -> int:
        dp = [[0] * (len(nums2) + 1) for _ in range(len(nums1) + 1)]
        result = 0
        for i in range(1, len(nums1)+1):
            for j in range(1, len(nums2)+1):
                if nums1[i-1] == nums2[j-1]:
                    dp[i][j] = dp[i-1][j-1]+1
                if dp[i][j] > result:
                    result = dp[i][j]
        return result

你可能感兴趣的:(代码随想录刷题训练营,算法)