(补)算法刷题Day24: BM61 矩阵最长递增路径

ops/2024/12/29 0:45:30/

题目链接

在这里插入图片描述

思路

方法一:dfs暴力回溯
使用原始used数组+4个方向遍历框架 =, 全局添加一个最大值判断最大的路径长度。
方法二:加上dp数组记忆的优雅回溯
抛弃掉used数组,使用dp数组来记忆遍历过的节点的最长递增路径长度。每遍历到已经记录过的坐标,就直接返回即可。

方法一代码

python">import copy
max_result_len = -1
result = []
direct = [(-1, 0), (1, 0), (0, -1), (0, 1)]
def dfs(matrix, used, row_n, col_m, x, y, path):# 判断是否合法global max_result_lenglobal resultif len(path) > max_result_len:max_result_len = len(path)print(max_result_len)print(path)result = copy.deepcopy(path)if x < 0 or y < 0 or x >= row_n or y >= col_m:returnif used[x][y]:return# 如果当前节点值是小于前一个,则passif matrix[x][y] <= path[-1]:returnused[x][y] = Truepath.append(matrix[x][y])for dx, dy in direct:nx = x + dxny = y + dydfs(matrix, used, row_n, col_m, nx, ny, path)used[x][y] = Falsepath.pop()
class Solution:def solve(self, matrix: List[List[int]]) -> int:# write code hererow = len(matrix)col = len(matrix[0])used = [[False for _ in range(row)] for _ in range(col)]for i in range (row):for j in range (col):dfs(matrix, used, row, col, i, j, [-1])return max_result_len-1

方法二代码

python">direct = [(-1, 0), (1, 0), (0, -1), (0, 1)]def dfs(matrix, row_n, col_m, x, y, path,dp):# 判断是否合法if x < 0 or y < 0 or x >= row_n or y >= col_m:return 0# 如果当前节点值是小于前一个,则passif matrix[x][y] <= path[-1]:return 0# 如果 dp 记录过就直接加上if dp[x][y] != -1:return dp[x][y]path.append(matrix[x][y])my_max = -1for dx, dy in direct:nx = x + dxny = y + dysub_max = dfs(matrix, row_n, col_m, nx, ny, path,dp)my_max = max(sub_max,my_max)path.pop()dp[x][y] = my_max+1return my_max+1
class Solution:def solve(self, matrix: List[List[int]]) -> int:row = len(matrix)col = len(matrix[0])dp = [[-1 for _ in range(row)]for _ in range(col)]max_result_len = -1for i in range(row):for j in range(col):m = dfs(matrix,row, col, i, j, [-1],dp)max_result_len = max(max_result_len, m)return max_result_len

这道题的dp卡了我很久。让我好几天都没有刷题的欲望。在需要机械化完成的任务面前,情绪更多时候真的是没用的东西。反正都要做的,早做晚做都是要做,开心也要做不开心也要做,倒不如不怀情绪地认真做。别急~


http://www.ppmy.cn/ops/145781.html

相关文章

怎么学习数据结构与算法?

数据结构与算法 提及数据结构与算法&#xff0c;许多人可能会不自觉地皱起眉头。似乎在不知不觉中&#xff0c;以字节跳动为代表的一批公司&#xff0c;在面试环节开始了一场针对算法的连环盘问。若非事先系统地刷过一系列算法题目&#xff0c;想要轻松通过这一关&#xff0c;…

解锁 Claude 的无限潜力:Prompt Engineering 从入门到精通

在人工智能领域&#xff0c;大型语言模型&#xff08;LLM&#xff09;如 Claude 的崛起&#xff0c;为我们带来了前所未有的机遇。然而&#xff0c;如何有效地与这些强大的模型进行交互&#xff0c;使其发挥出最大的潜力&#xff0c;成为了关键。Prompt Engineering&#xff08…

k8s创建单例redis设置密码

在 Kubernetes (k8s) 中创建一个带密码的单例 Redis 部署&#xff0c;你可以通过定义一个包含 Redis 容器、服务(Service)以及必要配置(如密码设置)的 YAML 文件来实现。以下是一个基本的示例&#xff0c;展示了如何配置这些组件。 1. 创建 Redis 部署(Deployment) 首先&#x…

DALL-M:基于大语言模型的上下文感知临床数据增强方法 ,补充

DALL-M&#xff1a;基于大语言模型的上下文感知临床数据增强方法 &#xff0c;补充 论文大纲理解结构分析数据分析1. 数据收集2. 数据处理和规律挖掘3. 相关性分析4. 数学模型建立解法拆解1. 逻辑关系拆解 子解法拆解&#xff1a; 2. 逻辑链分析3. 隐性方法分析4. 隐性特征分析…

智元与汇川加码,机器人如何利好电机市场?

【哔哥哔特导读】智元官宣量产近千台机器人、工控巨头汇川科技入局&#xff0c;近期的机器人行业释放了怎样的信号?电机行业是否又能乘借东风&#xff0c;迎来发展新的发展机遇? 机器人行业正迎来发展高峰。 近日&#xff0c;智元机器人已开启通用机器人商用量产&#xff0…

麒麟操作系统启停微服务jar包脚本.sh

#! /bin/bash # 端口号 PORTS(9054 9051 9056 9052 9055 9059 12010 9057 9060) # 模块 MODULES(DataMiniosService HealthyService IntegrationService ManagementService ProductService SystemService TheGateway ShowService AlgorithmService) # 模块名称 MODULE_NAMES(数…

【深度学习基础|pip安装】pip 安装深度学习库常见错误及解决方案,附案例。

【深度学习基础|pip安装】pip 安装深度学习库常见错误及解决方案&#xff0c;附案例。 【深度学习基础|pip安装】pip 安装深度学习库常见错误及解决方案&#xff0c;附案例。 文章目录 【深度学习基础|pip安装】pip 安装深度学习库常见错误及解决方案&#xff0c;附案例。1. 错…

EasyExcel 模板+公式填充

使用 CellWriteHandler 的实现类来实现公式写入 Data NoArgsConstructor public class CustomCellWriteHandler implements CellWriteHandler {private int maxRowNum 2000;// 动态传入列表数量public CustomCellWriteHandler(int maxRowNum) {this.maxRowNum maxRowNum;}Ov…