leetcode hot100 多维动态规划

1️⃣2️⃣ 多维动态规划(区间 DP、状态机 DP)

62. 不同路径

一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。问总共有多少条不同的路径?

题解:数组, 动态规划

  • 由一维转为二维了, 其实规划式子还是和前面的状态有关. 比如dp[i][j]表示到达(i,j)的所有路径, 又(i,j)只会从(i-1,j)&(i,j-1)移动而来, 那么, dp[i][j]=dp[i-1][j]+dp[i][j-1]

  • class Solution {public int uniquePaths(int m, int n) {int[][] dp = new int[m][n];for(int i=0;i<m;i++){dp[i][0]=1;}for(int j=0;j<n;j++){dp[0][j]=1;}for(int i=1;i<m;i++){for(int j=1;j<n;j++){dp[i][j] = dp[i-1][j]+dp[i][j-1];}}return dp[m-1][n-1];}
    }
    

64. 最小路径和

给定一个包含非负整数的 *m* x *n* 网格 grid ,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。说明:每次只能向下或者向右移动一步。

题解:数组, 动态规划

  • 跟前面那题一样, 其实走一遍图就知道了. dp[i][j]代表点(i,j)最小路径和, 那么第0排和第0列的数据是遍历一遍可以计算出来的: 当前grid值+前一位置的dp值

  • 那么其余位置可以计算了, dp[i][j] = Math.min(dp[i-1][j],dp[i][j-1])+grid[i][j]

  • class Solution {public int minPathSum(int[][] grid) {int m = grid.length;int n = grid[0].length;int[][] dp = new int[m][n];dp[0][0] = grid[0][0];for(int i=1;i<m;i++){dp[i][0] = dp[i-1][0]+grid[i][0];}for(int j=1;j<n;j++){dp[0][j] = dp[0][j-1]+grid[0][j];}for(int i=1;i<m;i++){for(int j=1;j<n;j++){dp[i][j] = Math.min(dp[i-1][j],dp[i][j-1])+grid[i][j];}}return dp[m-1][n-1];}
    }
    
5. 最长回文子串

给你一个字符串 s,找到 s 中最长的 回文 子串。

题解:子串, 递归, 动态规划

  • 如果一个字符串为回文串, 那么左右各缩减1的子串也为回文串

  • dp[][]存储的是(i,j)处的串是否为回文串, 如果是, 那么s[i] == s[j] &&dp[i+1][j-1]同时也是回文串

  • 怎么根据上面的式子找出动态规划呢, 我们最后肯定要维护一个最长回文子串大小以及begin处, 这样返回的才是s.substring(begin,begin+mL)

  • dp[i][i]肯定是回文的, 因为只有一个字符, 初始化以下; 计算是否回文, 或许可以用双指针, 一个指向头, 一个指向假定len的尾, 那么这个len要从多大开始呢–第二条可以得出: dp[i][j] = s[i]==s[j] && dp[i+1][j-1]

  • 我们需要先得出内部子串是否为回文, 那么len要从最小判断: for(int len = 2;i<=s.length();l++), 然后遍历s,从s的索引i处到i+len-1处, 看当前子串是否为回文的即可

  • class Solution {public String longestPalindrome(String s) {int n = s.length();if(n < 2) return s;int mL=1;int begin = 0;boolean[][] dp = new boolean[n][n];char[] chs = s.toCharArray();for(int l = 2;l<=n;l++){for(int i=0;i<n;i++){int j = i+l-1;if(j >= n) break;if(chs[i] != chs[j]){dp[i][j] = false;}else{if(j-i < 3) dp[i][j] = true;else{dp[i][j] = dp[i+1][j-1];}}if(j-i+1 > mL&dp[i][j]){mL = j-i+1;begin = i;}}}return s.substring(begin,begin+mL);}
    }
    
1143. 最长公共子序列

给定两个字符串 text1 和 text2,返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 ,返回 0 。一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。例如,"ace" 是 "abcde" 的子序列,但 "aec" 不是 "abcde" 的子序列。两个字符串的 公共子序列 是这两个字符串所共同拥有的子序列。

题解:子串, 动态规划

  • 其实这题我建议记下来, 因为很久不用这题的逻辑总会忘记, 但是代码又是很简单的

  • class Solution {public int longestCommonSubsequence(String text1, String text2) {int m = text1.length();int n = text2.length();int[][] dp = new int[m+1][n+1];char[] chs1 = text1.toCharArray();char[] chs2 = text2.toCharArray();for(int i=1;i<=m;i++){for(int j=1;j<=n;j++){if(chs1[i-1] == chs2[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[m][n];}
    }
    

72. 编辑距离

给你两个单词 word1 和 word2, 请返回将 word1 转换成 word2 所使用的最少操作数 。你可以对一个单词进行如下三种操作:插入一个字符; 删除一个字符; 替换一个字符

题解:最长公共子序列, 动态规划

  • 本题需要维护的是dp[i][j] , 表示A的前i个字母与B的前j个字母之间的编辑距离

  • class Solution {public int minDistance(String word1, String word2) {int n = word1.length();int m = word2.length();if(n*m == 0) return n+m;int[][] dp = new int[n+1][m+1];for(int i=0;i<=n;i++){dp[i][0]=i;}for(int j=0;j<=m;j++){dp[0][j] = j;}for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){int left = dp[i-1][j]+1;int down = dp[i][j-1]+1;int left_down = dp[i-1][j-1];if(word1.charAt(i-1)!= word2.charAt(j-1)){left_down+=1;}dp[i][j] = Math.min(left,Math.min(down,left_down));}}return dp[n][m];}
    }
    

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

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

相关文章

3.27学习总结 爬虫+二维数组+Object类常用方法

高精度&#xff1a; 一个很大的整数&#xff0c;以字符串的形式进行接收&#xff0c;并将每一位数存储在数组内&#xff0c;例如100&#xff0c;即存储为[1][0][0]。 p2437蜜蜂路线 每一个的路线数前两个数的路线数相加。 #include <stdio.h> int a[1005][1005]; int …

车载以太网网络测试-26【SOME/IP-通信方式-2】

目录 1 摘要2 Method &#xff08;FF/RR&#xff09;、Event、Filed介绍2.1. SOME/IP Method 接口2.1.1 **Fire & Forget (FF)** - 单向调用2.1.2 **Request/Response (RR)** - 请求/响应模式2.1.3 **车载ECU通信实现示例**:2.1.4 **通信序列示例**2.1.5 实现注意事项 2.2 …

把doi直接插入word中,然后直接生成参考文献

这段代码通过提取、查询、替换DOI&#xff0c;生成参考文献列表来处理Word文档&#xff0c;可按功能模块划分&#xff1a; 导入模块 import re from docx import Document from docx.oxml.ns import qn from habanero import Crossref导入正则表达式模块re用于文本模式匹配&a…

[C++] : C++11 右值引用的理解

&#xff08;一&#xff09;什么是左值和右值&#xff1f; 传统的C语法中就有引用的语法&#xff0c;而C11中新增了的右值引用语法特性&#xff0c;所以从现在开始我们 之前学习的引用就叫做左值引用。无论左值引用还是右值引用&#xff0c;都是给对象取别名。 1.左值 左值是一…

windows服务器切换到linux服务器踩坑点

单节点环境依赖性 单节点问题&#xff0c;影响业务可用性&#xff0c;windows影响后续自动化&#xff0c;健壮性的提升&#xff0c;需要进行linux化 每个服务至少是双节点&#xff0c;防止单点故障&#xff0c;提升系统的可用性&#xff0c;健壮性。linux化后可以进行docker化…

美颜SDK兼容性挑战:如何让美颜滤镜API适配iOS与安卓?

如何让美颜滤镜API同时适配iOS与Android&#xff0c;并确保性能流畅、效果一致&#xff0c;是开发者面临的一大挑战。今天&#xff0c;我将与大家一同深度剖析美颜SDK的跨平台兼容性问题&#xff0c;并分享优化适配方案。 一、美颜SDK兼容性面临的挑战 1.1不同平台的图像处理框…

Vue3 表单

Vue3 表单 随着前端技术的发展,Vue.js 作为一款流行的前端框架,不断更新迭代,以适应更高效、更便捷的开发需求。Vue3 作为 Vue.js 的第三个主要版本,引入了许多新特性和改进,其中包括对表单处理机制的优化。本文将深入探讨 Vue3 表单的使用方法、技巧以及注意事项。 1. …

笔记:代码随想录算法训练营day62:108.冗余连接、109.冗余连接II

学习资料&#xff1a;代码随想录 108. 冗余连接 卡码网题目链接&#xff08;ACM模式&#xff09; 判断是否有环的依据为&#xff0c;利用并查集&#xff0c;isSame函数&#xff0c;判断当下这条边的两个节点入集前是否为同根&#xff0c;如果是的话&#xff0c;该边就是会构…

RK3588,V4l2 读取Gmsl相机, Rga yuv422转换rgb (mmap)

RK3588, 使用V4l2 读取 gmsl 相机,获得yuv422格式图像, 使用 rga 转换 rgb 图像。减少cpu占用率. 内存管理方式采用 mmap… 查看相机信息 v4l2-ctl --all -d /dev/cam0 , 查看自己相机分辨率,输出格式等信息,对应修改后续代码测试… Driver Info:Driver name : rkcif…

Kubernetes》k8s》Containerd 、ctr 、cri、crictl

containerd ctr crictl ctr 是 containerd 的一个客户端工具。 crictl 是 CRI 兼容的容器运行时命令行接口&#xff0c;可以使用它来检查和调试 k8s 节点上的容器运行时和应用程序。 ctr -v 输出的是 containerd 的版本&#xff0c; crictl -v 输出的是当前 k8s 的版本&#x…

Vue 入门到实战 十一 Vuex

目录 11.1状态管理与应用场景 1&#xff09;state 2&#xff09;Getters 3&#xff09;Mutations 4&#xff09;Actions 5&#xff09;Module 11.2Vuex的安装与基本应用 11.3Vuex的核心概念 一句话解释vuex&#xff1a;就是单独成立一个组件&#xff0c;这个组件存储共…

【YOLOv11】目标检测任务-实操过程

目录 一、torch环境安装1.1 创建虚拟环境1.2 启动虚拟环境1.3 安装pytorch1.4 验证cuda是否可用 二、yolo模型推理2.1 下载yolo模型2.2 创建模型推理文件2.3 推理结果保存路径 三、labelimg数据标注3.1 安装labelimg3.2 解决浮点数报错3.3 labelimg UI界面介绍3.4 数据标注案例…

探索 Vue 中的多语言切换:<lang-radio /> 组件详解!!!

探索 Vue 中的多语言切换&#xff1a;<lang-radio /> 组件详解 &#x1f30d; 嗨&#xff0c;大家好&#xff01;&#x1f44b; 今天我们来聊聊如何在 Vue 项目中实现一个优雅的多语言切换功能——<lang-radio /> 组件。这是一个小而美的组件&#xff0c;出现在登…

grafana 配置页面告警

添加告警规则 1.登录grafana 点击 Alerting > Alert rules 点击 New alert rule 2.填写告警规则名字 3.配置告警规则 选择数据源为 Loki 单机 Builder 单机Label brower 单机 node_name 标签&#xff0c;选择一个主机&#xff0c;选好后单机 Show logs 这时候查询语…

关于JVM和OS中的栈帧的区别和内存浅析

关于JVM和OS中的栈帧的区别和内存浅析 刚看了黑马JVM中的栈帧的讲解&#xff0c;感觉和自己理解的栈帧有一定出入&#xff0c;查询资料研究了一下发现的确有天壤之别&#xff0c;可惜黑马并没有讲。 故写下这篇文章巩固一下, OS的栈帧&#xff1a; ​ OS的栈帧会在调用一个函…

Python FastApi(7):请求体

1 多个参数 1.1 混合使用 Path、Query 和请求体参数 首先&#xff0c;毫无疑问地&#xff0c;你可以随意地混合使用 Path、Query 和请求体参数声明&#xff0c;FastAPI 会知道该如何处理。你还可以通过将默认值设置为 None 来将请求体参数声明为可选参数&#xff1a; from ty…

告别枯燥工作,走向自动化

嘿&#xff0c;小伙伴们&#xff01;今天给你们介绍两款超实用的RPA办公自动化软件&#xff0c;用它们&#xff0c;再也不用像机器一样做重复劳动啦&#xff0c;超省时间&#xff01; 工具名称&#xff1a;影刀RPA&#xff08;类似产品&#xff0c;八爪鱼 RPA&#xff0c;操作上…

一种C# Winform的UI处理

效果 圆角 阴影 突出按钮 说明 这是一种另类的处理&#xff0c;不是多层窗口 也不是WPF 。这种方式的特点是比较简单&#xff0c;例如圆角、阴影、按钮等特别容易修改过。其实就是html css DirectXForm。 在VS中如下 圆角和阴影 然后编辑这个窗体的Html模板&#xff0c…

HarmonyOS-ArkUI Navigation (导航组件)-第一部分

导航组件主要实现页面间以及组件内部的界面跳转&#xff0c;支持在不同的组件间进行参数的传递&#xff0c;提供灵活的跳转栈操作&#xff0c;从而便捷的实现对不同页面的访问和复用。 我们之前学习过Tabs组件&#xff0c;这个组件里面也有支持跳转的方式&#xff0c;Navigati…

华为开源自研AI框架昇思MindSpore应用案例:基于MindSpore框架实现PWCNet光流估计

如果你对MindSpore感兴趣&#xff0c;可以关注昇思MindSpore社区 1 环境准备 1.进入ModelArts官网 云平台帮助用户快速创建和部署模型&#xff0c;管理全周期AI工作流&#xff0c;选择下面的云平台以开始使用昇思MindSpore&#xff0c;可以在昇思教程中进入ModelArts官网 创建…