码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 代码随想录训练营二刷第五十六天 | 1143.最长公共子序列 1035.不相交的线 53. 最大子序和


    代码随想录训练营二刷第五十六天 | 1143.最长公共子序列 1035.不相交的线 53. 最大子序和

    一、1143.最长公共子序列

    题目链接:https://leetcode.cn/problems/longest-common-subsequence/
    思路:定义dp[i][j]表示在区间nums1[0, i-1]和nums2[0, j-1]区间中最长公共子序列长度,当nums1[i-1]==nums2[j-1]时,dp[i][j] = dp[i-1][j-1] + 1。当不等时,就各退一步,取最大值dp[i][j] = Math.max(dp[i-1][j], dp[i][j-1])。
    如:a, b, c, d和 a, c。dp[4][2]就会从a,b,c,d和a中与a,b,c和a,c中取最长子数组。

    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++) {
                for (int j = 1; j <= text2.length(); j++) {
                    if (text1.charAt(i-1) == 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()];
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    二、1035.不相交的线

    题目链接:https://leetcode.cn/problems/uncrossed-lines/
    思路:本题即为最长重复子数组和上题一模一样。

    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];
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    三、53. 最大子序和

    题目链接:https://leetcode.cn/problems/maximum-subarray/
    思路:定义dp[i]为以下标i结尾的区间的最大连续子序列和,那么dp[i]的状态从两个地方推出,一是,把当前元素作为上一个连续序列的结尾,二是,把当前元素作为一个新的连续序列的开始。二者取最大值。即dp[i] = Math.max(dp[i-1]+nums[i], nums[i])

    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 (dp[i] > max) max = dp[i];
            }
            return max;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
  • 相关阅读:
    led台灯如何挑选?2022双十一什么样的台灯对眼睛好
    政安晨:【深度学习神经网络基础】(十三)—— 卷积神经网络
    Tlsr8258开发-读写内部flash
    虚拟环境下把python代码打包成exe(小白教程)
    C++系统相关操作3 - 获取操作系统的平台类型
    深入理解计算机系统——第七章 Linking
    【Java面试】什么是IO的多路复用机制?
    【机器学习基础】对数几率回归(logistic回归)
    在 SpringBoot 中使用 ThreadPoolTaskScheduler 实现定时任务
    背包问题(01背包、完全背包、多重背包)
  • 原文地址:https://blog.csdn.net/qq_43511039/article/details/133829889
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号