代码随想录:动态规划41-44

300.最长递增子序列

题目

给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。

子序列 是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。 

示例 1:

输入:nums = [10,9,2,5,3,7,101,18]
输出:4
解释:最长递增子序列是 [2,3,7,101],因此长度为 4 。

示例 2:

输入:nums = [0,1,0,3,2,3]
输出:4

代码

class Solution {public int lengthOfLIS(int[] nums) {int n = nums.length; //元素个数//dp[i]:以i为子序列末尾元素的子序列最长值int[] dp = new int[n];//初始化:默认子序列都是1Arrays.fill(dp, 1);int max = 1;   //保存dp[i]的最大值//遍历顺序:fori移动子序列的末尾元素for(int i=1; i < n; i++){//forj:求出以i为子序列末尾元素的子序列最长值for(int j=0; j < i; j++){//如果nums[i] > nums[j],说明i有可能成为j后面的子序列if(nums[i] > nums[j]){//dp[j]表示以j为子序列末尾元素的子序列最长值//+1说明i需要接入j后面的子序列了dp[i] = Math.max(dp[i], dp[j] + 1);}max = Math.max(max,dp[i]); //更新dp[i]最大值}}return max;}
}

674.最长连续递增子序列

题目

给定一个未经排序的整数数组,找到最长且 连续递增的子序列,并返回该序列的长度。

连续递增的子序列 可以由两个下标 l 和 rl < r)确定,如果对于每个 l <= i < r,都有 nums[i] < nums[i + 1] ,那么子序列 [nums[l], nums[l + 1], ..., nums[r - 1], nums[r]] 就是连续递增子序列。

示例 1:

输入:nums = [1,3,5,4,7]
输出:3
解释:最长连续递增序列是 [1,3,5], 长度为3。
尽管 [1,3,5,7] 也是升序的子序列, 但它不是连续的,因为 5 和 7 在原数组里被 4 隔开。 

代码(贪心)

class Solution {public int findLengthOfLCIS(int[] nums) {//贪心int res = 1;  //全局连续递增子序列长度int tmpLen = 1;  //局部连续递增子序列长度for(int i=1; i < nums.length; i++){//连续递增,只用比较i和i-1的大小if(nums[i] > nums[i-1]){tmpLen++;  //局部连续递增子序列长度}else{tmpLen = 1; //出现不递增的情况,tmp归1,重新寻找递增}res = Math.max(res, tmpLen);}return res;}
}

代码(动态规划)

class Solution {public int findLengthOfLCIS(int[] nums) {//动态规划//dp[i]表示以i为连续递增子序列末尾元素的序列最大值int[] dp = new int[nums.length];//初始化:默认全为1Arrays.fill(dp, 1);int res = 1;  //保存dp[i]的最大值//遍历顺序:从前往后for(int i=1; i < nums.length; i++){//比较i和i-1的大小if(nums[i] > nums[i-1]){dp[i] = dp[i-1] + 1;  //i满足递增条件}// else{//     dp[i] = 1;   //i不满足递增条件,子序列重新计算// }res = Math.max(res, dp[i]);}return res;}
}

718、最长重复子数组

题目

给两个整数数组 nums1 和 nums2 ,返回 两个数组中 公共的 、长度最长的子数组的长度 

示例 1:

输入:nums1 = [1,2,3,2,1], nums2 = [3,2,1,4,7]
输出:3
解释:长度最长的公共子数组是 [3,2,1] 。

代码

class Solution {public int findLength(int[] nums1, int[] nums2) {int len1 = nums1.length;  //nums1元素个数int len2 = nums2.length;  //nums2元素个数//dp[i][j]表示以i为nums1的末尾元素,以j为nums2的末尾元素的相同子数组最大长度int[][] dp = new int[len1][len2];int res = 0;  //保存最大子数组的长度//初始化第一列for(int i=0; i < len1; i++){if(nums1[i] == nums2[0]){dp[i][0] = 1;res = 1;  //更新最大子数组的长度}}//初始化第一行for(int j=0; j < len2; j++){if(nums2[j] == nums1[0]){dp[0][j] = 1;res = 1; //更新最大子数组的长度}}//遍历顺序(交换也行)for(int i=1; i < len1; i++){for(int j=1; j < len2; j++){if(nums1[i] == nums2[j]){  //i和j元素值相同//递推公式:i-1和j-1的数组子序列相同,加上i和j也相同,子序列长度+1dp[i][j] = dp[i-1][j-1] + 1;}res = Math.max(res, dp[i][j]); //更新最大子数组的长度}}return res;}
}

代码(优化初始化)

class Solution {public int findLength(int[] nums1, int[] nums2) {int len1 = nums1.length;  //nums1元素个数int len2 = nums2.length;  //nums2元素个数//dp[i][j]表示以nums1[i-1]的末尾元素,以nums2[j-1]的末尾元素的相同子数组最大长度int[][] dp = new int[len1+1][len2+1];int res = 0;  //保存最大子数组的长度//dp数组初始化,dp[0][j]和dp[i][0]全为0//这种写法可以简化第一行第一列的初始化//遍历顺序(交换也行)for(int i=1; i <= len1; i++){for(int j=1; j <= len2; j++){if(nums1[i-1] == nums2[j-1]){  //i和j元素值相同//递推公式:i-2和j-1的数组子序列相同,加上i-1和j-1也相同,子序列长度+1dp[i][j] = dp[i-1][j-1] + 1;}res = Math.max(res, dp[i][j]); //更新最大子数组的长度}}return res;}
}

1143、最长公共子序列

题目

给定两个字符串 text1 和 text2,返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 ,返回 0 。

一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。

  • 例如,"ace" 是 "abcde" 的子序列,但 "aec" 不是 "abcde" 的子序列。

两个字符串的 公共子序列 是这两个字符串所共同拥有的子序列。

示例 1:

输入:text1 = "abcde", text2 = "ace" 
输出:3  
解释:最长公共子序列是 "ace" ,它的长度为 3 。

代码(优化初始化)

class Solution {public int longestCommonSubsequence(String text1, String text2) {int len1 = text1.length();  //text1长度int len2 = text2.length();  //text2长度//dp[i][j]表示[0,i-1]的text1与[0,j-1]的text2的最长公共子序列int[][] dp = new int[len1+1][len2+1];//初始化:默认dp[0][j],dp[i][0]全为0//把dp多扩展一个行列,就不用处理text1[0]和text2[0]的初始化情况了//变相的把初始化的计算和下面的递推合在一起//遍历顺序for(int i=1; i <= len1; i++){for(int j=1; j <= len2; j++){//递推公式,text1[i-1]和text2[j-1]相同if(text1.charAt(i-1) == text2.charAt(j-1)){dp[i][j] = dp[i-1][j-1] + 1;  //在i-2和j-2的基础上长度+1}//text1[i-1]和text2[j-1]不相同else{//ab,ac取(ab,a)和(a,ac)两者的最大长度dp[i][j] = Math.max(dp[i-1][j], dp[i][j-1]);}}}return dp[len1][len2];  //返回最长公共子序列}
}

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

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

相关文章

C语言之猜数字小游戏

哈喽&#xff0c;大家好&#xff01;我是冰淇淋加点糖。今天我们来用前面所学的知识来开发一个猜数字的小游戏&#xff0c;锻炼我们的编程能力和编程思维。 猜数字小游戏功能简介 1.随机生成一个1-100的数字。 2.玩家用户开始猜数字。 > 猜大了&#xff0c;提醒猜大了…

[米联客-XILINX-H3_CZ08_7100] FPGA程序设计基础实验连载-27浅谈XILINX BRAM的基本使用

软件版本&#xff1a;VIVADO2021.1 操作系统&#xff1a;WIN10 64bit 硬件平台&#xff1a;适用 XILINX A7/K7/Z7/ZU/KU 系列 FPGA 实验平台&#xff1a;米联客-MLK-H3-CZ08-7100开发板 板卡获取平台&#xff1a;https://milianke.tmall.com/ 登录“米联客”FPGA社区 http…

C#/WinForm 演示遗传算法

一、一览 二、遗传算法流程 种群初始&#xff1a;随机生成一组N个DNA&#xff0c;每个DNA上都有S个基因&#xff0c;每个DNA都有自己的r值&#xff08;适度值&#xff09;。r最大的DNA为种群最优。 选择操作&#xff1a;将每个DNA的r值占总体的比例作为新一代选取的概率&#…

2024 【Delphi 12】苹果ios开发环境配置(五星保姆级)

目录 一、创建证书 1. 创建证书签名请求&#xff1a;&#xff08;在苹果电脑上操作&#xff09;&#xff1a; .certSigningRequest 文件 2. 创建证书&#xff1a;在苹果的 开发者网站 上操作 重复以上步骤并下载对应的证书文件如下&#xff1a; 3. 创建标识符&#xff08;…

Debezium+Kafka:Oracle 11g 数据实时同步至 DolphinDB 运维手册

目前我们已经支持基于开源技术 Debezium Kafka&#xff0c;从 Mysql 和 Oracle 11g 实时同步数据到 DolphinDB 中。由于当前方案涉及到四个程序的部署&#xff0c;而且具体的 Source 同步任务和 Sink 同步任务还需要额外管理&#xff0c;在运维上具有一定难度。 本文将基于 O…

前端框架的演变与选择

目录 前端框架的演变与选择 1. 什么是前端框架&#xff1f; 2. 前端框架的演变 2.1 早期的Web开发 2.2 JavaScript库的兴起 2.3 MVC架构的引入 3. 现代前端框架概览 3.1 React 3.2 Vue.js 3.3 Angular 4. 其他值得关注的前端框架 4.1 Svelte 4.2 Ember.js 5. 如何…

【大数据】生活中三大数据的概念及其关系

数据库、数据结构和大数据之间存在密切的关联,它们共同构成了计算机科学和信息技术领域中的重要组成部分。以下是对这三者之间关系的详细阐述: 1. 数据库与数据结构的关联 数据结构是数据库的基础:数据库用于存储和管理大量数据,而这些数据的组织方式正是基于数据结构。数…

Ecology10中的CAS身份认证问题

单点登录&#xff08;SSO&#xff09;是一种身份验证解决方案&#xff0c;可让用户通过一次性用户身份验证登录多个应用程序和网站。实现SSO的方式有很多种&#xff0c;比如Kerberos、SAML、OAuth2、JWT、OpenID、CAS、LDAP等。 CAS CAS (Central Authentication Service) 最初…

西中区2024年度安全知识竞赛活动方案

为有效预防安全生产事故的发生&#xff0c;深化西中区全体员工对安全生产的认识&#xff0c;切实提升全体人员的安全意识和自我保护能力&#xff0c;夯实安全知识基础&#xff0c;丰富安全文化内涵&#xff0c;推动安全生产工作更加规范化、系统化&#xff0c;根据西中区安全生…

git 回滚的三种方式

按照从旧到新的顺序 你依次提交了 1 2 3 4 5 现在你想回到1 如何操作 第一种方法 hard reset git reset --hard 执行命令后 你会发现 效果实现了 东西都回到了那次更改 但是2345的更改都没了 并且你会发现 你有更新 这是因为这个hard reset 只会改本地的 远程的不改 一更新就…

EasyCVR视频汇聚平台:巧妙解决WebRTC无法播放H.265视频的难题

随着科技的飞速发展&#xff0c;视频监控已经成为现代安全管理不可或缺的一部分&#xff0c;广泛应用于智慧工地、智慧煤矿、智慧工厂、智慧社区和智慧校园等多个领域。在这个过程中&#xff0c;视频编码技术和实时通信技术显得尤为重要。EasyCVR视频汇聚平台&#xff0c;凭借其…

Python爬虫(一文通)

Python爬虫&#xff08;基本篇&#xff09; 一&#xff1a;静态页面爬取 Requests库的使用 1&#xff09;基本概念安装基本代码格式 应用领域&#xff1a;适合处理**静态页面数据和简单的 HTTP 请求响应**。 Requests库的讲解 含义&#xff1a;requests 库是 Python 中一个…

机器人外呼有哪些优势?

机器人外呼&#xff0c;作为一种结合了计算机技术和人工智能技术的自动化工具&#xff0c;具有多重显著优势。以下是其主要优势的详细阐述&#xff1a; ### 1. 高效性 * **大幅提升工作效率**&#xff1a;机器人外呼可以全天候、不间断地进行工作&#xff0c;不受时间、地点和…

pytest+pycharm+HTMLTestReportCN实现接口自动化

前提&#xff1a;已安装pycharm&#xff0c;已配置python环境 第一步&#xff1a;新建一个py类&#xff0c;用来执行all的测试用例 import HTMLTestReportCN import unittest, os, yagmail# -*- coding: utf-8 -*- """ Time &#xff1a; 2024/9/2 14:50 Auth …

/单元测试

承接上文 统一异常处理&#xff0c;封装结果-CSDN博客 ******************************************** 登录业务 Service public class EmployeeServiceImpl extends ServiceImpl<EmployeeMapper, Employee> implements EmployeeService {Resourceprivate JwtUtils j…

数据库透明加密的定义与原理

数据库透明加密(TDE)是一种先进的加密技术&#xff0c;主要用于保护存储在数据库中的敏感数据&#xff0c;防止未经授权的访问和数据泄露。以下是对数据库透明加密的详细解析&#xff1a; 一、定义与原理 定义&#xff1a;数据库透明加密是一种在数据库管理系统(DBMS)中集成加密…

苹果笔记本电脑能不能玩游戏?苹果电脑玩游戏咋样?

过去Mac玩不了游戏最大的问题&#xff0c;就是图形API自成一体&#xff0c;苹果既不支持微软的DirectX&#xff0c;同时为了推广自家的Metal图形API&#xff0c;又对OpenGL和Vulkan两大主流的通用API敬而远之。游戏生态、硬件瓶颈让苹果电脑不适合玩游戏。 不过说到底&#xf…

点餐收银小程序

一、项目概述 Hi&#xff0c;大家好&#xff0c;今天分享的项目是《点餐收银小程序》。 系统含管理员/商家/用户三种角色&#xff0c;商家能维护菜式类别、维护菜品信息&#xff0c;用户在小程序能够选择门店&#xff0c;查看门店下各个分类的菜式信息&#xff0c;并进行加购…

ASP.NET Core 入门教学七 缓存机制

ASP.NET Core 提供了多种缓存机制&#xff0c;可以帮助您提高应用程序的性能。以下是一些常用的缓存方法&#xff1a; 1. 内存缓存 内存缓存是最简单的缓存形式&#xff0c;它将数据存储在应用程序的内存中。ASP.NET Core 提供了一个 IMemoryCache 接口&#xff0c;用于实现内…

ai免费生成ppt软件有哪些?我推荐秒出PPT

现在市面上的ai生成PPT软件非常的多。有收费的&#xff0c;也有不收费的&#xff0c;生成的效果也各不相同。要选择一个性价比高的确实难度不小。 我在使用了不少的产品之后&#xff0c;说一说我的心得。 首先就是&#xff0c;大部分免费的ai生成ppt产品并不好用。我怕不排除…