代码随想录算法训练营第五十三天| 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;
    }
}
相关推荐
王景程7 小时前
什么是哈希函数
算法·哈希算法
会不再投降2197 小时前
《算法复杂度:数据结构世界里的“速度与激情”》
数据结构·算法
kaiaaaa7 小时前
算法训练第十五天
开发语言·python·算法
Coovally AI模型快速验证8 小时前
SLAM3R:基于单目视频的实时密集3D场景重建
神经网络·算法·3d·目标跟踪·音视频
Once_day8 小时前
代码训练LeetCode(29)最后一个单词的长度
算法·leetcode·c
凌肖战8 小时前
力扣上C语言编程题:最大子数组和(涉及数组)
c语言·算法·leetcode
蒟蒻小袁8 小时前
力扣面试150题--除法求值
算法·leetcode·面试
客卿1238 小时前
力扣hot100--反转链表
算法·leetcode·链表
wangjialelele8 小时前
动态内存管理之柔性数组
数据结构·算法