代码随想录算法训练营第五十三天| 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;
    }
}
相关推荐
学行库小秘6 分钟前
基于门控循环单元的数据回归预测 GRU
人工智能·深度学习·神经网络·算法·回归·gru
_meow_21 分钟前
数学建模 15 逻辑回归与随机森林
算法·数学建模·逻辑回归
二向箔reverse1 小时前
机器学习算法核心总结
人工智能·算法·机器学习
猿究院--冯磊2 小时前
JVM垃圾收集器
java·jvm·算法
野犬寒鸦2 小时前
力扣hot100:最大子数组和的两种高效方法:前缀和与Kadane算法(53)
java·后端·算法
我家大宝最可爱3 小时前
动态规划:入门思考篇
算法·动态规划·代理模式
肉夹馍不加青椒3 小时前
第三十三天(信号量)
java·c语言·算法
古译汉书4 小时前
嵌入式-SPI番外之按钮驱动程序的编写-Day15
c语言·stm32·单片机·嵌入式硬件·mcu·算法
快去睡觉~4 小时前
力扣48:旋转矩阵
算法·leetcode·矩阵
卡洛斯(编程版6 小时前
(1) 哈希表全思路-20天刷完Leetcode Hot 100计划
python·算法·leetcode