当前位置: 首页 > news >正文

代码随想录算法训练营第四十六天|LeetCode 1143,1035,53

目录

LeetCode 1143.最长公共子序列

动态规划五步曲:

1.确定dp[i][j]的含义

2.找出递推公式

3.初始化dp数组

4.确定遍历顺序

5.打印dp数组

LeetCode 1035.不相交的线

LeetCode 53.最大子序列和(动态规划)

动态规划五步曲:

1.确定dp[i]的含义

2.找出递推公式

3.初始化dp数组

4.确定遍历方向

5.打印dp数组


LeetCode 1143.最长公共子序列

文章讲解:代码随想录

视频讲解:动态规划子序列问题经典题目 | LeetCode:1143.最长公共子序列_哔哩哔哩_bilibili

力扣题目:LeetCode 1143.最长公共子序列

动态规划五步曲:

1.确定dp[i][j]的含义

dp[i][j]:在nums1[i]和nums2[j]中所对应的最长公共最长子序列的最大长度为dp[i][j]

2.找出递推公式

if(char1 == char2){dp[i][j] = dp[i-1][j-1] + 1;
}else{dp[i][j] = Math.max(dp[i-1][j], dp[i][j-1]);
}

3.初始化dp数组

dp[i][0] = 0;

dp[j][0] = 0;

4.确定遍历顺序

从前往后,从上往下遍历

5.打印dp数组

代码如下(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 char1 = text1.charAt(i-1);for(int j = 1; j <= text2.length(); j++){char char2 = text2.charAt(j-1);if(char1 == char2){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()];}
}

LeetCode 1035.不相交的线

文章讲解:代码随想录

视频讲解:动态规划之子序列问题,换汤不换药 | LeetCode:1035.不相交的线_哔哩哔哩_bilibili

力扣题目:LeetCode 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];}
}

 

LeetCode 53.最大子序列和(动态规划)

文章讲解:代码随想录

视频讲解:看起来复杂,其实是简单动态规划 | LeetCode:53.最大子序和_哔哩哔哩_bilibili

力扣题目:LeetCode 53.最大子序列和(动态规划)

 

 

动态规划五步曲:

1.确定dp[i]的含义

dp[i]:下标为i的最大子数组和为dp[i]

2.找出递推公式

dp[i] = Math.max(dp[i-1]+nums[i], nums[i]);

3.初始化dp数组

dp[0] = nums[0];
int res = nums[0];

4.确定遍历方向

从前往后遍历

5.打印dp数组

 

代码如下(Java):

class Solution {public int maxSubArray(int[] nums) {if(nums.length == 1)    return nums[0];int[] dp = new int[nums.length];dp[0] = nums[0];int res = nums[0];for(int i = 1; i < nums.length; i++){dp[i] = Math.max(dp[i-1]+nums[i], nums[i]);res = Math.max(res, dp[i]);}return res;}
}

http://www.lryc.cn/news/140750.html

相关文章:

  • leetcode 541.反转字符串II
  • MyBatis与Spring整合以及AOP和PageHelper分页插件整合
  • 《认知觉醒》读书笔记之潜意识
  • Stable Diffusion 系列教程 | 图生图基础
  • cuda编程day001
  • Java 中使用 ES 高级客户端库 RestHighLevelClient 清理百万级规模历史数据
  • C++最易读手撸神经网络两隐藏层(任意Nodes每层)梯度下降230821a
  • Leetcode 2235.两整数相加
  • Postman —— postman实现参数化
  • LeetCode--HOT100题(41)
  • 微信小程序教学系列(6)
  • 小程序中的全局配置以及常用的配置项(window,tabBar)
  • 数据工厂调研及结果展示
  • 抓包相关,抓包学习
  • 云原生之使用Docker部署SSCMS内容管理系统
  • uniapp -- 在组件中拿到pages.json下pages设置navigationBarTitleText这个值?
  • Java获取环境变量和运行时环境信息和自定义配置信息
  • React入门 组件学习笔记
  • Windows商店引入SUSE Linux Enterprise Server和openSUSE Leap
  • [NLP]深入理解 Megatron-LM
  • 软考高级系统架构设计师系列论文七十八:论软件产品线技术
  • yolov5中添加ShuffleAttention注意力机制
  • Effective C++条款17——以独立语句将newed 对象置入智能指针(资源管理)
  • 奇迹MU服务器如何选择配置?奇迹MU服务器租用
  • 如何远程管理服务器详解
  • JavaScript——为什么静态方法不能调用非静态方法
  • Python实现常见的排序算法
  • 【git】fatal: refusing to merge unrelated histories
  • 在编辑器中使用正则
  • 【Linux】腾讯云服务器(Linux版)如果获取UUID(通用唯一标识符)