代码随想录算法训练营第五十三天| 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;
    }
}
相关推荐
qq_433554543 分钟前
C++ 二维线性DP
c++·算法·图论
风筝在晴天搁浅6 分钟前
代码随想录 115.不同的子序列
算法
c#上位机11 分钟前
halcon2个区域合并为1个区域—union2
图像处理·算法·计算机视觉·halcon
程序员-King.19 分钟前
双指针/滑动窗口—算法总结与教学指南
经验分享·算法·双指针
小武~33 分钟前
Leetcode 每日一题C 语言版 -- 274 H-index
c语言·算法·leetcode
0 0 037 分钟前
CCF-CSP 36-3 缓存模拟(cache)【C++】
开发语言·c++·算法
蒟蒻小袁37 分钟前
Hot100--找到字符串中所有字母异位词
java·算法·leetcode·面试
kingmax5421200843 分钟前
高中数学教师资格面试试讲稿:《直线的位置关系(例2)》
线性代数·算法·面试·矩阵·教师资格
吃着火锅x唱着歌44 分钟前
LeetCode 2909.元素和最小的山形三元组II
数据结构·算法·leetcode
小O的算法实验室1 小时前
2026年SEVC SCI2区,基于k均值聚类和自适应双群策略的粒子群算法,深度解析+性能实测
算法·论文复现·智能算法·智能算法改进