Leetcode刷题笔记——多维动态规划篇

Leetcode刷题笔记——多维动态规划篇

第一题:最小路径和

Leetcode64:最小路径和:中等题 (详情点击链接见原题)

给定一个包含非负整数的 m x n 网格 grid ,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小

python代码解法

class Solution:def minPathSum(self, grid: List[List[int]]) -> int:m, n = len(grid), len(grid[0])  # m 行 n 列dp_matrix = [[0] * n for _ in range(m)]dp_matrix[0][0] = grid[0][0]for i in range(1, n):  # dp数组初始化dp_matrix[0][i] = dp_matrix[0][i - 1] + grid[0][i]for j in range(1, m):dp_matrix[j][0] = dp_matrix[j - 1][0] + grid[j][0]for x in range(1, m):for y in range(1, n):dp_matrix[x][y] = min(dp_matrix[x][y - 1] + grid[x][y], dp_matrix[x - 1][y] + grid[x][y])# print(dp_matrix)return dp_matrix[m - 1][n - 1]

第二题:三角形最小路径和

Leetcode120. 三角形最小路径和:中等题 (详情点击链接见原题)

给定一个三角形 triangle ,找出自顶向下的最小路径和。
每一步只能移动到下一行中相邻的结点上。相邻的结点 在这里指的是 下标 与 上一层结点下标 相同或者等于 上一层结点下标 + 1 的两个结点。也就是说,如果正位于当前行的下标 i ,那么下一步可以移动到下一行的下标 ii + 1

python代码解法

class Solution:def minimumTotal(self, triangle: List[List[int]]) -> int:dp = [[0 for _ in range(len(tri))] for tri in triangle]dp[0][0] = triangle[0][0]for i in range(1, len(triangle)):for j in range(0, len(triangle[i])):if 0 < j < len(triangle[i]) - 1:dp[i][j] = min(dp[i - 1][j - 1], dp[i - 1][j]) + triangle[i][j]elif j == 0:dp[i][j] = dp[i - 1][j] + triangle[i][j]else:dp[i][j] = dp[i - 1][j - 1] + triangle[i][j]return min(dp[len(triangle) - 1])

第三题:不同路径

Leetcode62. 不同路径:中等题 (详情点击链接见原题)

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

解题思路
机器人从(0 , 0) 位置出发,到 (m - 1, n - 1) 终点

1.确定 dp 数组(dp table)以及下标的含义
dp[i][j] :表示从(0 ,0)出发,到 (i, j)dp[i][j] 条不同的路径

2.确定递推公式
dp[i][j] 只能有两个方向来推导出来,即 dp[i - 1][j]dp[i][j - 1]dp[i - 1][j] 表示从 (0, 0) 的位置到 (i - 1, j) 有几条路径

3.dp数组如何初始化
dp[i][0]dp[0][j] 一定都是1,因为从 (0, 0) 的位置到 (i, 0)(0, j) 的路径只有一条

4.确定遍历顺序
递推公式 dp[i][j] = dp[i - 1][j] + dp[i][j - 1]dp[i][j] 都是从其上方和左方推导而来,那么从左到右一层一层遍历就可以了

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

python代码解法

class Solution:def uniquePaths(self, m: int, n: int) -> int:dp = [[0] * n for _ in range(m)]# dp 数组初始化for row in range(m):dp[row][0] = 1for col in range(1, n):dp[0][col] = 1for row in range(1, m):for col in range(1, n):dp[row][col] = dp[row - 1][col] + dp[row][col - 1]return dp[m - 1][n - 1]

第四题:不同路径 II

Leetcode63. 不同路径 II:中等题 (详情点击链接见原题)

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

python代码解法

class Solution:def uniquePathsWithObstacles(self, obstacleGrid: List[List[int]]) -> int:m, n = len(obstacleGrid), len(obstacleGrid[0])dp = [[0] * n for _ in range(m)]  # dp 数组初始化if obstacleGrid[0][0] == 1:return 0for row in range(m):if obstacleGrid[row][0] != 1:dp[row][0] = 1else:breakfor col in range(1, n):if obstacleGrid[0][col] != 1:dp[0][col] = 1else:breakfor row in range(1, m):for col in range(1, n):if obstacleGrid[row][col] != 1:dp[row][col] = dp[row - 1][col] + dp[row][col - 1]else:continuereturn dp[m - 1][n - 1]

第五题

Leetcode221. 最大正方形:中等题 (详情点击链接见原题)

在一个由 '0''1' 组成的二维矩阵内,找到只包含 '1' 的最大正方形,并返回其面积

1. 确定 dp 数组(dp table)以及下标的含义
dp[i][j] : 多补充一行全 0、多一列全 0dp[i][j] 的含义为以 matrix[i[j] 为右下角的正方形的最大边长

在这里插入图片描述

2. 确定递推公式
dp[r][c] = min(dp[r - 1][c], dp[r][c - 1], dp[r - 1][c - 1]) + 1
翻译成中文为若某格子的值为 1,则以此为右下角的正方形的最大边长为:上面的正方形,左边的正方形,左上的正方形中边长最小的那个,再加上此格

python代码解法

class Solution:def maximalSquare(self, matrix: List[List[str]]) -> int:if not matrix or len(matrix) < 1 or len(matrix[0]) < 1:return 0row, col = len(matrix), len(matrix[0])maxSide = 0dp = [[0 for _ in range(col + 1)] for _ in range(row + 1)]for r in range(1, row + 1):for c in range(1, col + 1):if matrix[r - 1][c - 1] == '1':dp[r][c] = min(dp[r - 1][c], dp[r][c - 1], dp[r - 1][c - 1]) + 1maxSide = max(maxSide, dp[r][c])return maxSide * maxSide

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

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

相关文章

稀碎从零算法笔记Day36-LeetCode:H指数

有点绕的一个题&#xff0c;题目描述的有点奇怪&#xff08;可以看下英文&#xff1f;&#xff09; 题型&#xff1a;数组、模拟 链接&#xff1a;274. H 指数 - 力扣&#xff08;LeetCode&#xff09; 来源&#xff1a;LeetCode 题目描述 给你一个整数数组 citations &am…

SpringBoot登录校验(四)过滤器Filter

JWT令牌生成后&#xff0c;客户端发的请求头中会带有JWT令牌&#xff0c;服务端需要校验每个请求的令牌&#xff0c;如果在每个controller方法中添加校验模块&#xff0c;则十分复杂且冗余&#xff0c;所以引入统一拦截模块&#xff0c;将请求拦截下来并做校验&#xff0c;这块…

【算法】两数之和(暴力求解+哈希表)

本题来源---《两数之和》。 题目描述 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 target 的那 两个 整数&#xff0c;并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是&#xff0c;数组中同一个元素在答案里…

Golang | Leetcode Golang题解之第12题整数转罗马数字

题解&#xff1a; 题解&#xff1a; var (thousands []string{"", "M", "MM", "MMM"}hundreds []string{"", "C", "CC", "CCC", "CD", "D", "DC", "…

UNITY实战进阶-BatchRendererGroup+Jobs+Burst+RVO2+GPUAnimation 实现万人团战(一)

研究思路&#xff1a;GPUAnimation把动画放入GPU中处理&#xff0c;BatchRendererGroup进行动态批量渲染处理&#xff0c;JobsBurst进行多线程处理逻辑&#xff08;移动、攻击等&#xff09;&#xff0c;RVO2采用Jobs的寻路导航。 准备工作&#xff1a; Editor > Project S…

VMware虚拟机(Rocky9.3)硬盘扩容详细图文教程

参考<<鸟哥的Linux>>以及VMware虚拟机硬盘扩容详细图文教程 原因: 用户空间不足,且系统是用LVM&#xff08;logical volume manager&#xff09;进行分区 df -h #查看/home目录下磁盘容量不足磁盘扩容步骤 关闭虚拟机,选择编辑虚拟机, 点击硬盘,再点击扩容 这个…

Redis安装说明

Redis安装说明 大多数企业都是基于Linux服务器来部署项目&#xff0c;而且Redis官方也没有提供Windows版本的安装包。因此课程中我们会基于Linux系统来安装Redis. 此处选择的Linux版本为CentOS 7. Redis的官方网站地址&#xff1a;https://redis.io/ 1.单机安装Redis 1.1.…

Mysql底层原理十一:Mvcc

为什么要mvcc&#xff1f; 提高并发度&#xff0c;如果读和写都是通过加锁的方式&#xff0c;并发肯定上不来&#xff0c;通过mvcc来实现写通过加锁&#xff0c;读通过mvcc readView机制 3.9.1 Undo版本链 再重复一遍&#xff0c;页面中的记录存放在用户表空间的数据页中&a…

VLAN 与 VXLAN:一个字母之差,到底两者有什么区别?

来源&#xff1a;网络技术联盟站 网络虚拟化技术在现代网络架构中扮演着至关重要的角色&#xff0c;而其中的两个重要代表——虚拟局域网&#xff08;VLAN&#xff09;和虚拟扩展局域网&#xff08;VXLAN&#xff09;——在网络管理和扩展性方面发挥着独特的作用。本文将深入研…

LeetCode-1483. 树节点的第 K 个祖先【树 深度优先搜索 广度优先搜索 设计 二分查找 动态规划】

LeetCode-1483. 树节点的第 K 个祖先【树 深度优先搜索 广度优先搜索 设计 二分查找 动态规划】 题目描述&#xff1a;解题思路一&#xff1a;暴力解法会超时&#xff01;【一级一级往上跳&#xff0c;效率太低】解题思路二&#xff1a;倍增&#xff0c;利用二进制运算&#xf…

gin框架提高篇(三)

多服务器程序运行 package mainimport ("fmt""github.com/gin-gonic/gin""golang.org/x/sync/errgroup""net/http""time" )var g errgroup.Group // 使用 errgroup.Group 来并发启动这两个服务器func main() {// 服务器1se…

穿越代码之海:探寻结构体深层逻辑,展望未来应用新天地

欢迎来到白刘的领域 Miracle_86.-CSDN博客 系列专栏 C语言知识 先赞后看&#xff0c;已成习惯 创作不易&#xff0c;多多支持&#xff01; 结构体作为一种数据结构&#xff0c;其定义和特点决定了它在各种应用中的广泛适用性。随着科技的进步和新兴行业的不断涌现&#xf…

HarmonyOS 应用开发之wrapBuilder:封装全局@Builder

全局Builder作为wrapBuilder的参数返回WrappedBuilder对象&#xff0c;实现 全局Builder 可以进行赋值和传递。 说明&#xff1a; 从API version 11开始使用。 接口说明 wrapBuilder是一个模板函数&#xff0c;返回一个WrappedBuilder对象。 declare function wrapBuilder<…

机器学习数据预处理—统计分析方法

数据预处理 1 数据规范化 量纲&#xff0c;指将一个物理导出量用若干基本量的乘方之积表示出来的表达式。数据的比较需要关注两点——绝对数值和量纲&#xff0c;而特征间因为量纲的存在导致无法直接通过绝对数值比较大小&#xff0c;也就无法判断特征间的重要性。例如若某个…

算法:树形dp(树状dp)

文章目录 一、树形DP的概念1.基本概念2.解题步骤3.树形DP数据结构 二、典型例题1.LeetCode&#xff1a;337. 打家劫舍 III1.1、定义状态转移方程1.2、参考代码 2.ACWing&#xff1a;285. 没有上司的舞会1.1、定义状态转移方程1.2、拓扑排序参考代码1.3、dfs后序遍历参考代码 一…

刷题之Leetcode209题(超级详细)

209.长度最小的子数组 力扣题目链接(opens new window)https://leetcode.cn/problems/minimum-size-subarray-sum/ 给定一个含有 n 个正整数的数组和一个正整数 s &#xff0c;找出该数组中满足其和 ≥ s 的长度最小的 连续 子数组&#xff0c;并返回其长度。如果不存在符合条…

数据可视化高级技术Echarts(快速上手柱状图进阶操作)

目录 1.Echarts的配置 2.程序的编码 3.柱状图的实现&#xff08;入门实现&#xff09; 相关属性介绍&#xff08;进阶&#xff09;&#xff1a; 1.标记最大值/最小值 2.标记平均值 3.柱的宽度 4. 横向柱状图 5.colorBy series系列&#xff08;需要构造多组数据才能实现…

以动态库链接库 .dll 探索结构体参数

Dev c C语言实现第一个 dll 动态链接库 创建与调用-CSDN博客 在写dll 插件中发现的函数指针用途和 typedef 的定义指针的用法-CSDN博客 两步之后&#xff0c;尝试加入结构体实现整体数据使用。 注意结构体 Ak 是相同的 代码如下 DLL文件有两个&#xff0c;dll.dll是上面提到…

C-偶遇行军蚁(遇到过的题,做个笔记)

我的代码: 思路就是把每一行看成一个字符串&#xff0c;然后逐渐增加字符就行 #include <iostream> #include <vector> using namespace std; int main() {string s;int n;cin >> n; //读入行数cin >> s; //读入字符串vector<string>arr(n…

一点点金融

一点点金融 价值投资 需求 > 有限 > 不可逆 > 优势 > 长期持有者多趋势分析 改进MACD策略&#xff0c;使用涨跌幅比值RSI计算MACD原始MACD计算改进思路&#xff1a;使用涨跌幅比值RSI计算MACD 价值投资 需求 > 有限 > 不可逆 > 优势 > 长期持有者多…