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

news2024/9/28 1:17:08

参考

代码随想录

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

  1. 确定dp数组下标及其含义
    dp[i][j]:字符串text1中的0~i字符构成的字符串和字符串text2中的0~j字符构成的字符串的最长 公共子序列 的长度为dp[i][j]。注意和之前做过的LeetCode 718. 最长重复子数组中dp数组定义的区别!!

  2. 确定递推公式

if(text1[i] == text2[j])
    dp[i][j] = dp[i-1][j-1] + 1;
else
    dp[i][j] = max(dp[i-1][j],dp[i][j-1]);
  1. 初始化dp数组
    需要初始化dp数组的第0行和第0列,代码如下:
vector<vector<int>> dp(text1.size(),vector<int>(text2.size(),1));
for(int i = 0; i < text1.size(); i++){
    if(text1[i] != text2[0])    dp[i][0] = 0;
    else    break;
}
for(int j = 0; j < text2.size(); j++){
    if(text2[j] != text1[0])    dp[0][j] = 0;
    else    break;
}

4.确定遍历顺序
两层for循环,里层和外层都是一样的,每层循环从前往后遍历。

  1. 举例推导dp数组
    在这里插入图片描述
    完整的代码实现如下:
class Solution {
public:
    int longestCommonSubsequence(string text1, string text2) {
        vector<vector<int>> dp(text1.size(),vector<int>(text2.size(),1));
        for(int i = 0; i < text1.size(); i++){
            if(text1[i] != text2[0])    dp[i][0] = 0;
            else    break;
        }
        for(int j = 0; j < text2.size(); j++){
            if(text2[j] != text1[0])    dp[0][j] = 0;
            else    break;
        }
        for(int i = 1; i < text1.size(); i++){
            for(int j = 1; j < text2.size(); j++){
                if(text1[i] == text2[j])
                    dp[i][j] = dp[i-1][j-1] + 1;
                else
                    dp[i][j] = max(dp[i-1][j],dp[i][j-1]);
            }
        }
        return dp.back()[text2.size()-1];
    }
};

题目二:LeetCode 1035.不相交的线

这个题和上个题一模一样,没有区别,关键想明白怎么个一样法。

class Solution {
public:
    int maxUncrossedLines(vector<int>& nums1, vector<int>& nums2) {
        vector<vector<int>> dp(nums1.size(),vector<int>(nums2.size(),1));
        for(int i = 0; i < nums1.size(); i++){
            if(nums1[i] != nums2[0])    dp[i][0] = 0;
            else    break;
        }
        for(int j = 0; j < nums2.size(); j++){
            if(nums2[j] != nums1[0])    dp[0][j] = 0;
            else    break;
        }
        for(int i = 1; i < nums1.size(); i++){
            for(int j = 1; j < nums2.size(); j++){
                if(nums1[i] == nums2[j])
                    dp[i][j] = dp[i-1][j-1] + 1;
                else
                    dp[i][j] = max(dp[i-1][j],dp[i][j-1]);
            }
        }
        return dp.back()[nums2.size()-1];
    }
};

题目三:LeetCode 53. 最大子序和

  1. 确定dp数组及其下标的含义
    dp[i]:第i个元素位置处连续子数组的最大和,dp[i]表示的局部最大

  2. 确定递推公式
    因为dp[i]表示的局部最大,因此dp[i]有两个可能:

  • dp[i-1] + nums[i],即在上一个累加值的基础上,继续累加
  • nums[i],放弃之前的累加值(累加值变小的情况),重新开始累加

最终要取最大值,dp[i] = max(dp[i-1]+nums[i],nums[i])。

  1. 初始化dp数组
int result = nums[0];
dp[0] = nums[0];
  1. 确定遍历顺序
    根据递推关系,要从前往后遍历。

  2. 举例推导dp数组
    在这里插入图片描述

完整的代码实现如下:

class Solution {
public:
    int maxSubArray(vector<int>& nums) {
        vector<int> dp(nums.size());
        int result = nums[0];
        dp[0] = nums[0];
        for(int i = 1; i < nums.size(); i++){
            dp[i] = max(dp[i-1] + nums[i],nums[i]);
            if(dp[i] > result)  result = dp[i];
        }   
        return result;
    }
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/97167.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

将postgresql配置为Linux服务管理 systemctl service

发行版安装的数据库在装完后会自动添加数据库服务&#xff0c;但编译安装的不会&#xff0c;需要手动添加。 cd postgresql-14.0/contrib/start-scripts/ cp linux /etc/init.d/postgresql cd /etc/init.d/ vi postgresql 修改以下部分 ## EDIT FROM HERE# Installation pre…

Vuex4.0.0 源码解析

本文章基于以下版本撰写 VUE 版本&#xff1a; 3.0VUEX 版本&#xff1a;4.0.0Vuex仓库&#xff1a;https://github.com/vuejs/vuex/tree/v4.0.0Vux文档&#xff1a;https://vuex.vuejs.org/zh/ 在 vue 中使用 vuex import { createApp } from vue import { createStore } f…

C语言中函数的先后关系,java和C语言的语法区别

以上代码中&#xff0c;sum函数在上面&#xff0c;main函数在下面&#xff0c;在main函数中就可以调用sum函数。 如果sum函数定义在main函数后面&#xff0c;则需要在main函数前面声明sum函数。即在main函数前面写&#xff1a;void sum(int begin, int end); C语言中&#xf…

EMC测试中的电流探头

专栏 专注介绍电磁兼容&#xff08;EMC&#xff09;的相关知识&#xff0c;算是对本人浸染 EMC 专业十余年的一个阶段小结 。 本文目录1.EMC测试中的电流探头是什么&#xff1f;2.电流探头的主要指标要求3.什么是转移阻抗&#xff1f;1.EMC测试中的电流探头是什么&#xff1f; …

校园兼职网站

开发工具(eclipse/idea/vscode等)&#xff1a; 数据库(sqlite/mysql/sqlserver等)&#xff1a; 功能模块(请用文字描述&#xff0c;至少200字)&#xff1a; 网站前台&#xff1a;关于我们、联系我们、资讯信息、企业信息、职位信息 管理员模块&#xff1a; 1、管理关于我们、联…

vTESTstudio入门到精通 - vTESTstudio工具栏介绍_File

vTESTstudio作为跟CANoe工具并套使用的一个强大的工具&#xff0c;那么想要用好它就得对他有个全面的认识&#xff0c;第一步起码要知道tade工具栏都包含哪些功能要清楚&#xff0c;今天我们就着重分享下vTESTstudio工具栏包含哪些内容&#xff0c;以便在我们编程的时候更好的去…

java 瑞吉外卖day2 笔记 员工增加 员工信息分页查询

PostMapping public R save(HttpServletRequest request,RequestBody Employee employee){log.info("新增员工&#xff1a;{}",employee);//设置初始密码123456 需要进行md5加密employee.setPassword(DigestUtils.md5DigestAsHex("123456".getBytes()));em…

homeassistant 接入小米温湿度计2

方法可能有很多种&#xff0c;但是我只用这种方法介入成功了 环境&#xff1a; - 香橙派&#xff08;自带蓝牙&#xff0c;树莓派应该也可以&#xff09; - 小米温湿度计2 - 网站&#xff1a;Telink Flasher v4.7 、 Telink Flasher (atc1441.github.io) - 固件&#xff1…

基于java+springmvc+mybatis+vue+mysql的高校普法系统

项目介绍 随着信息化时代的到来&#xff0c;管理系统都趋向于智能化、系统化,高校普法系统也不例外&#xff0c;但目前国内的市场仍都使用人工管理&#xff0c;市场规模越来越大&#xff0c;同时信息量也越来越庞大&#xff0c;人工管理显然已无法应对时代的变化&#xff0c;而…

堆排序快速排序插入排序

堆排序 数据结构使用的是1 dimension的数组来作为二叉树的堆结构&#xff0c;所以并没有使用结构体&#xff0c;而是直接使用了数组 而且堆是完全二叉树&#xff0c;也就是除了最后一层以外&#xff0c;其他层都是满二叉树&#xff0c;最后一层可能不满&#xff0c;所以1dime…

基于jeecgboot的flowable流程支持服务任务的功能

1、描述 Java服务任务用于调用外部Java类。 2、图形表示法 服务任务可视化为圆角矩形&#xff0c;左上角有一个小齿轮图标&#xff0c;如下图&#xff1a; 3、XML表示 有三种方法声明如何调用Java逻辑&#xff0c;下面分别介绍&#xff1a; 调用固定的类 使用flowable:cla…

Flask打开调试模式

调试模式 Flask支持本地开发&#xff0c;但是每次修改代码后需要手动重新启动程序&#xff0c;这不是很友好&#xff0c;事实上Flask支持调试模式来做到更好&#xff0c;Flask服务会在代码更改时自动重新加载&#xff0c;如果出现问题&#xff0c;还能提供调试器以供调试 如何…

docker登陆MySQL提示密码错误,Navicat也连接不上

问题原因 今天在操作自己云服务器MySQL数据库的时候发现使用root进行远程登录的时候被拒绝了&#xff0c;一直提示Access denied for user ‘root‘‘localhost‘ (using password: YES)。 可以确认自己账号密码是没有错的。后来以为是远程访问出问题了&#xff0c;进入到容器…

JavaSE基础篇:泛型说明

本文整理自B站&#xff1a;JavaSE强化教程泛型&#xff0c;由点到面的讲解了整个泛型体系第一章&#xff1a;泛型概述一&#xff1a;泛型概念二&#xff1a;泛型类1&#xff1a;泛型类使用2&#xff1a;泛型类派生子类1)&#xff1a;子类也是泛型类2)&#xff1a;子类不是泛型类…

SQL进阶笔记

SQL进阶笔记 CASE表达式 简单case表达式 case sexwhen 1 then 男when 2 then 女else 其他 end搜索case表达式 case when sex 1 then 男when sex 2 then 女else 其他 end编写SQL语句的时候需要注意&#xff0c;在发现为真的WHEN子句时&#xff0c;CASE表达式的真假值判断就会中…

Java并发编程(一)—— FutureTask超详细教程

一、前言 创建线程有几种方式?这个问题的答案应该是可以脱口而出的吧: 继承 Thread 类实现 Runnable 接口但这两种方式创建的线程是属于三无产品: 没有参数没有返回值没办法抛出异常用着三无产品总是有一些弊端,其中没办法拿到返回值是最让人不能忍的,于是 Callable 就诞…

TeamsApp LukcyDraw升级之路 之 DB Infra 篇

今天继续 LuckyDraw 的升级之路&#xff0c;之前在1500以上用户同时使用的时候&#xff0c;特别是在短时间内大家一起点击参与抽奖参的时候&#xff0c;服务会出现大量的错误&#xff0c;分析后发现&#xff0c;出现错误的原因基本都是 Azure Storage Table 返回的。当时使用 A…

【GRU回归预测】基于matlab卷积神经网络结合门控循环单元CNN-GRU数据预测(多输入单输出)【含Matlab期源码 2274期】

⛄一、CNN-GRU数据预测 1 理论基础 1.1 CNN算法 负荷序列数据为一维数据&#xff0c;用一维卷积核对数据进行卷积处理&#xff0c;以获取数据的特征。 现设定卷积核的维度为3&#xff0c;移动步长为1&#xff0c;对输入数据进行卷积&#xff0c;以获得特征图图谱&#xff0c;即…

记录那不用百度的美好代码

努力工作&#xff0c;日益消瘦&#xff0c;总有些代码不想记住。我称之为&#xff1a;拿来即用系列 一&#xff1a;格式化时间 1.去除时间的T // 去除日期中T function timeFormatSeconds(time) {if(!time) return time;var date time.substr(0, 10); //年月日var hours ti…

jsp+ssm计算机毕业设计宠物商城【附源码】

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; JSPSSM mybatis Maven等等组成&#xff0c;B/S模式 Mave…