代码随想录算法训练营第五十三天| 1143.最长公共子序列 1035.不相交的线 53. 最大子序和 动态规划

代码随想录算法训练营第五十三天| 1143.最长公共子序列 1035.不相交的线 53. 最大子序和 动态规划

一、力扣1143.最长公共子序列

题目链接

思路:最长重复子序列是以i和j结尾的区间,num[i]=num[j] dp[i][j]=dp[i-1][j-1]+1

最长公共子序列,dp[i][j]定义为0-i和0-j区间内最长公共子序列的长度,区间结尾处相等自然等于dp[i][j]=dp[i-1][j-1]+1,不等就继承上一个区间的长度,max(dp[i-1][j], dp[i][j-1])

java 复制代码
class Solution {
    public int longestCommonSubsequence(String text1, String text2) {
        int[][] dp = new int[text1.length()+1][text2.length()+1];
        for (int i = 1; i <= text1.length(); i++) {
            char c1 = text1.charAt(i-1);
            for (int j = 1; j <= text2.length(); j++) {
                if (c1 == text2.charAt(j-1)) {
                    dp[i][j] = dp[i-1][j-1] + 1;
                }else {
                    dp[i][j] = Math.max(dp[i-1][j], dp[i][j-1]);
                }
            }
        }
        return dp[text1.length()][text2.length()];
    }
}

二、力扣1035.不相交的线

题目链接

思路:这个最多数量的不想交的线和最长公共子序列是一样的。

java 复制代码
class Solution {
    public int maxUncrossedLines(int[] nums1, int[] nums2) {
        int[][] dp = new int[nums1.length+1][nums2.length+1];
        for (int i = 1; i <= nums1.length; i++) {
            for (int j = 1; j <= nums2.length; j++) {
                if (nums1[i-1] == nums2[j-1]) {
                    dp[i][j] = dp[i-1][j-1] + 1;
                }else {
                    dp[i][j] = Math.max(dp[i-1][j], dp[i][j-1]);
                }
            }
        }
        return dp[nums1.length][nums2.length];
    }
}

三、力扣53. 最大子序和 动态规划

题目链接

思路:求最长子序列和,dp[i]就只能从两种方式中得出,一种是把num[i]加入前面的子序列,另一种就是把当前的num[i]作为一个新的子序列的开头,dp[i]=max(dp[i-1]+num[i], num[i])

java 复制代码
class Solution {
    public int maxSubArray(int[] nums) {
        int[] dp = new int[nums.length];
        dp[0] = nums[0];
        int max = dp[0];
        for (int i = 1; i < nums.length; i++) {
            dp[i] = Math.max(dp[i-1] + nums[i], nums[i]);
            if (max < dp[i]) max = dp[i];
        }
        return max;
    }
}
相关推荐
计算机安禾9 分钟前
【数据结构与算法】第21篇:二叉树遍历的经典问题:由遍历序列重构二叉树
c语言·数据结构·学习·算法·重构·visual studio code·visual studio
信奥胡老师20 分钟前
P1255 数楼梯
开发语言·数据结构·c++·学习·算法
爱睡懒觉的焦糖玛奇朵1 小时前
【工业级落地算法之人员摔倒检测算法详解】
人工智能·python·深度学习·神经网络·算法·yolo·目标检测
小辉同志1 小时前
78. 子集
算法·leetcode·深度优先
Book思议-1 小时前
【数据结构】二叉树入门全解:从定义、性质到经典真题
数据结构·算法·二叉树
stolentime3 小时前
通信题:洛谷P15942 [JOI Final 2026] 赌场 / Casino题解
c++·算法·洛谷·joi·通信题
初生牛犊不怕苦3 小时前
与AI一起学习《C专家编程》:数组与指针
c语言·学习·算法
Kk.08023 小时前
数据结构|排序算法(二) 冒泡排序
数据结构·算法·排序算法
沛沛rh453 小时前
深入并发编程:从 C++ 到 Rust 的学习笔记
c++·笔记·学习·算法·rust
Kk.08024 小时前
数据结构|排序算法(二) 希尔排序
数据结构·算法·排序算法