牛客热题:矩阵最长递增路径

📟作者主页:慢热的陕西人

🌴专栏链接:力扣刷题日记

📣欢迎各位大佬👍点赞🔥关注🚓收藏,🍉留言

在这里插入图片描述

文章目录

  • 牛客热题:矩阵最长递增路径
    • 题目链接
    • 方法一:DFS
      • 思路
      • 代码
      • 复杂度
      • 时间复杂度:
      • 空间复杂度:
    • 方法二:优化--- 一个位置只递归一次
      • 思路
      • 代码
      • 复杂度
      • 时间复杂度:
      • 空间复杂度:

牛客热题:矩阵最长递增路径

题目链接

矩阵最长递增路径_牛客题霸_牛客网 (nowcoder.com)

方法一:DFS

思路

dfs:以(x, y)为起点进行递归:

​ 对于每个(x, y)来说,遍历它上下左右四个坐标,查看是否越界或者满足递增的要求;

​ 若是满足要求就继续递归满足要求的点

slove: 两重循环遍历矩阵中所有的点

代码

void dfs(vector<vector<int>>& matrix, vector<vector<int>>& st, int count, int x, int y, int& res){array<int, 4> dx = {-1, 0, 1, 0};array<int, 4> dy = {0, 1, 0, -1};int n = st.size();int m = st[0].size();for(int i = 0; i < 4; ++i){int X = x + dx[i], Y = y + dy[i];if(X < 0 || X >= n || Y < 0 || Y >= m)continue;if(st[X][Y] == 0 && matrix[X][Y] > matrix[x][y]){st[X][Y] = 1;dfs(matrix, st, count + 1, X, Y, res);st[X][Y] = 0;}}res = max(res, count);}int solve(vector<vector<int> >& matrix) {   int n = matrix.size();int m = matrix[0].size();int res = 1;vector<vector<int>> st(n, vector<int>(m));for(int i = 0; i < n; ++i)for(int j = 0; j < m; ++j)dfs(matrix, st, 1, i, j, res);return res;}

复杂度

时间复杂度:

​ dfs的时间复杂度为O(m * n), 主函数调用了m * n次,所以总体的时间复杂度是O( ( m ∗ n ) 2 (m * n) ^ 2 (mn)2)

空间复杂度:

创建了一个和原矩阵空间大小相同的矩阵用于判断当前的左边是否被递归过,以及一些变量。

​ 所以总体上来说空间复杂度:O(n * m);

方法二:优化— 一个位置只递归一次

思路

  1. 动态规划缓存: dp 矩阵用来缓存已经计算过的路径长度,避免重复计算。
  2. 减少递归调用: 通过在每个位置初始化时只调用一次 DFS,减少了不必要的递归调用。
  3. 简化函数参数: 去掉了 st 矩阵和 count 参数,将 dp 矩阵用作缓存,count 的功能由 dp[x][y] 代替。

代码

class Solution {
public:void dfs(const vector<vector<int>>& matrix, vector<vector<int>>& dp, int x, int y, int& res) {array<int, 4> dx = {-1, 0, 1, 0};array<int, 4> dy = {0, 1, 0, -1};int n = matrix.size();int m = matrix[0].size();for (int i = 0; i < 4; ++i) {int X = x + dx[i], Y = y + dy[i];if (X < 0 || X >= n || Y < 0 || Y >= m || matrix[X][Y] <= matrix[x][y]) {continue;}if (dp[X][Y] == 0) {dfs(matrix, dp, X, Y, res);}dp[x][y] = max(dp[x][y], 1 + dp[X][Y]);}res = max(res, dp[x][y]);}int solve(vector<vector<int>>& matrix) {int n = matrix.size();if (n == 0) return 0;int m = matrix[0].size();vector<vector<int>> dp(n, vector<int>(m, 0));int res = 1;for (int i = 0; i < n; ++i) {for (int j = 0; j < m; ++j) {if (dp[i][j] == 0) {dp[i][j] = 1;dfs(matrix, dp, i, j, res);}}}return res;}
};

复杂度

时间复杂度:

​ 相当于遍历一遍对应的矩阵O(n * m)

空间复杂度:

创建了一个和原矩阵同等空间的dp数组,则空间复杂度为O(n * m)

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

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

相关文章

leetcode155 最小栈

题目 设计一个支持 push &#xff0c;pop &#xff0c;top 操作&#xff0c;并能在常数时间内检索到最小元素的栈。 实现 MinStack 类: MinStack() 初始化堆栈对象。void push(int val) 将元素val推入堆栈。void pop() 删除堆栈顶部的元素。int top() 获取堆栈顶部的元素。i…

关于LPC1768在线升级的实现的注意事项

开发环境&#xff1a;Keil 5 uVision V5.38.0.0 1、使用IAP的方式&#xff08;应用程序在线编程&#xff09; 2、在Flash中构建用于升级的不同区域 &#xff08;1&#xff09;引导区 &#xff08;2&#xff09;APP区 &#xff08;3&#xff09;升级代码存放区域 注意&…

阿里影业业绩大涨,除了沸腾的文娱市场还有什么原因?

影视文娱市场的火热仍在延续&#xff0c;新定档的电影和演出&#xff0c;不断引人关注这个行业的生机。而这个行业的支持者、受益者&#xff0c;就站在一线。 5月29日晚&#xff0c;阿里影业发布截至2024年3月31日的2024财年业绩公告。社会文娱消费的热情&#xff0c;对优质项…

深度学习笔记:2.Jupyter Notebook

Jupyter Notebook 常用操作快捷键魔法指令_jupyter notebook快捷键调用函数-CSDN博客https://blog.csdn.net/qq_26917905/article/details/137211336?ops_request_misc%257B%2522request%255Fid%2522%253A%2522171748112816800182160793%2522%252C%2522scm%2522%253A%25222014…

视频生成框架EasyAnimate正式开源!

近期&#xff0c;Sora模型的热度持续上涨&#xff0c;社区中涌现了一些类Sora的开源项目&#xff0c;这些项目均基于Diffusion Transformer结构&#xff0c;使用Transformer结构取代了UNet作为扩散模型的基线&#xff0c;旨在生成更长、更高分辨率、且效果更好的视频。EasyAnim…

罗德与施瓦茨RS SMA100A 9KHZ-3GHZ或6GHZ信号发生器

R&S SMA100A 提供信号质量、速度和灵活性。R&S SMA100A 是一款高级模拟发生器&#xff0c;因其出色的特性而树立了标准。 它结合了卓越的信号质量和极高的设置速度。无论是在开发、生产、服务还是维护方面&#xff0c;R&SSMA100A 都能出色地完成任务。 罗德与施瓦茨…

空调外机清洁机器人设计

现在的空调&#xff0c;有很多安装在高层&#xff0c;一旦安装使用后&#xff0c;外机几乎不可能再清洗。因为费用高&#xff0c;清洁工人的钱应该是好几百还不止&#xff1b;清洁风险高&#xff0c;空调师傅需要高空作业&#xff0c;如果发生意外业主难以承担。但空调运行几年…

Web IDE 在线编辑器综合实践(Web IDE 技术探索 三)

前言 前面两篇文章&#xff0c;我们简单讲述了 WebContainer/api 、Terminal 的基本使用&#xff0c;离完备的在线代码编辑器就差一个代码编辑了。今天通过 monaco editor &#xff0c;来实现初级代码编辑功能&#xff0c;讲述的是整个应用的搭建&#xff0c;并不单独针对monac…

LeetCode-43. 字符串相乘【数学 字符串 模拟】

LeetCode-43. 字符串相乘【数学 字符串 模拟】 题目描述&#xff1a;解题思路一&#xff1a;模拟乘法&#xff0c;两个数中每一位数相乘的时候乘上他们各自的进制数&#xff0c;之后求和。循环时&#xff0c;分别记录各自的进制数背诵版&#xff1a;解题思路三&#xff1a;0 题…

项目-双人五子棋对战:匹配模块的实现(3)

完整代码见: 邹锦辉个人所有代码: 测试仓库 - Gitee.com 模块详细讲解 功能需求 匹配就类似于大家平常玩的王者荣耀这样的匹配功能, 当玩家点击匹配之后, 就会进入到一个匹配队列, 当匹配到足够数量的玩家后, 就会进入确认页. 在这里, 我们主要实现的是1 - 1匹配功能, 首先先…

pycharm链接auto al服务器

研0提前进组&#xff0c;最近阻力需求是把一个大模型复现&#xff0c;笔者电脑18年老机子&#xff0c;无法满足相应的需求。因此租用auto dl服务器。本文记录自己使用pycharm&#xff08;专业版&#xff09;链接auto dl期间踩过的坑。 1.下载pycharm专业版 这一步不解释了&am…

逐步掌握最佳Ai Agents框架-AutoGen 九 RAG应用

在最近的几篇文章里&#xff0c;我们使用AutoGen实现了一些Demo。这篇文章&#xff0c;我们将使用AutoGen来完成RAG应用开发。 RAG应用 RAG全称"Retrieval-Augmented Generation",即检索增强生成&#xff0c;它是自然语言处理中的一项技术。这种模型结合了检索式&a…

Latex之图片排列的简单使用(以MiKTeX工具为例)

一、参考资料 Latex如何插入图片 Latex 学术撰写工具推荐&#xff08;在线、Windows、Mac、Linux&#xff09; 关于Latex并排多张图片及加入图片说明的方法 二、准备工作 1. 在线LaTex工具 Overleaf 2. 本地LaTex工具 MiKTeX 3. 测试用例 \documentclass{article} \ti…

拓展商机的金钥匙:成为SSL证书合作商的长期回报

在当今数字化浪潮中&#xff0c;网络安全已经成为企业生存和发展不可或缺的一部分。随着在线交易和数据交换的增多&#xff0c;SSL证书作为保障网站安全和增强用户信任的关键工具&#xff0c;其重要性日益凸显。成为SSL证书的合作商后&#xff0c;不仅能够立即开启新的收入来源…

解决微信小程序分享按钮不可用

问题描述 在微信小程序中点击胶囊按钮上的三个点&#xff0c;在弹出的对话框中的【分享给好友】【分享到朋友圈】按钮都属于不可用的状态&#xff0c;显示未设置。 问题截图 解决方案 在每个需要此功能的页面都需要添加此代码&#xff0c;否则就不能进行使用。 // vue3时&l…

证件照太大了怎么压缩到100k?6个软件教你快速进行压缩

证件照太大了怎么压缩到100k&#xff1f;6个软件教你快速进行压缩 压缩证件照大小通常需要使用专门的图片压缩工具或者图片编辑软件。以下是六款常用的软件&#xff0c;它们可以帮助你快速压缩证件照大小到100KB以内&#xff1a; 1.迅捷压缩&#xff1a;这是一款图片压缩工具…

【Kubernetes】k8s的调度约束(亲和与反亲和)

一、调度约束 list-watch 组件 Kubernetes 是通过 List-Watch 的机制进行每个组件的协作&#xff0c;保持数据同步的&#xff0c;每个组件之间的设计实现了解耦。 用户是通过 kubectl 根据配置文件&#xff0c;向 APIServer 发送命令&#xff0c;在 Node 节点上面建立 Pod 和…

每天的CTF小练--6.5(ascll码高级运用)

题目&#xff1a;[HUBUCTF 2022 新生赛]baby_encrypt hint&#xff1a; 781612443113954655886887407898899451044114412011257135914071455155316031651170318041861191719652013207021272183228423832485254125932643269827992924 注意查看前面的数字&#xff0c;这题不想现…

Mybatis01-初识Mybatis

简介 1、 什么是Mybatis MyBatis 是一款优秀的持久层框架; 它支持自定义 SQL、存储过程以及高级映射 MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。 MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO&#xff08;Plain Ol…

try…except语句

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 在程序开发时&#xff0c;有些错误并不是每次运行都会出现。例如&#xff0c;实例01&#xff0c;只要输入的数据符合程序的要求&#xff0c;程序就可…