【Leetcode】2684. 矩阵中移动的最大次数

news/2024/4/27 17:49:13

文章目录

  • 题目
  • 思路
  • 代码
  • 结果

题目

题目链接🔗
给你一个下标从 0 开始、大小为 m x n 的矩阵 grid ,矩阵由若干 整数组成。

你可以从矩阵第一列中的 任一 单元格出发,按以下方式遍历 grid :

从单元格 (row, col) 可以移动到 (row - 1, col + 1)、(row, col + 1) 和 (row + 1, col + 1) 三个单元格中任一满足值 严格 大于当前单元格的单元格。
返回你在矩阵中能够 移动最大 次数。

示例 1
在这里插入图片描述
输入:grid = [[2,4,3,5],[5,4,9,3],[3,4,2,11],[10,9,13,15]]
输出:3
解释:可以从单元格 (0, 0) 开始并且按下面的路径移动:

  • (0, 0) -> (0, 1).
  • (0, 1) -> (1, 2).
  • (1, 2) -> (2, 3).

可以证明这是能够移动的最大次数。

示例 2
在这里插入图片描述
输入:grid = [[3,2,4],[2,1,9],[1,1,7]]
输出:0
解释:从第一列的任一单元格开始都无法移动。

提示

  • m == grid.length
  • n == grid[i].length
  • 2 <= m, n <= 1000
  • 4 <= m * n <= 105
  • 1 <= grid[i][j] <= 106

思路

这道题可以使用动态规划进行完成,题目的意思就是每一次可以移动到右上角或者与右边或者是i右下角,那么我们直接反过来对左边的上中下进行选取即可, d p [ i ] [ j ] dp[i][j] dp[i][j]表示到当前位置最多要多少步,这个数字取决于前面的 d p [ i − 1 ] [ j − 1 ] dp[i-1][j-1] dp[i1][j1] d p [ i ] [ j − 1 ] dp[i][j-1] dp[i][j1] d p [ i + 1 ] [ j − 1 ] dp[i+1][j-1] dp[i+1][j1],取三者里面的最大值加一赋值给 d p [ i ] [ j ] dp[i][j] dp[i][j]。最后统计最多移动的次数的时候需要注意这样子的计算方法包含中间开始的,而题目要求的是最左边的那一列开始,所以我们可以在统计的时候加上一个条件限制,如果符合题目要求的话移动的次数刚好等于dp数组对应的列下标。

代码

class Solution {
public:int maxMoves(vector<vector<int>>& grid) {int n=grid.size(),m=grid[0].size();vector<vector<int>> dp(n, vector<int>(m, 0));int maxzhi=1;for(int i=0;i<n;++i)dp[i][0]=1;for(int j=1;j<m;++j){for(int i=0;i<n;++i){if(i==0){if(grid[i][j]>grid[i][j-1])dp[i][j]=max(dp[i][j],dp[i][j-1]+1);if(grid[i][j]>grid[i+1][j-1])dp[i][j]=max(dp[i][j],dp[i+1][j-1]+1);}else if(i==n-1){if(grid[i][j]>grid[i-1][j-1])dp[i][j]=max(dp[i][j],dp[i-1][j-1]+1);if(grid[i][j]>grid[i][j-1])dp[i][j]=max(dp[i][j],dp[i][j-1]+1);}else{if(grid[i][j]>grid[i-1][j-1])dp[i][j]=max(dp[i][j],dp[i-1][j-1]+1);if(grid[i][j]>grid[i][j-1])dp[i][j]=max(dp[i][j],dp[i][j-1]+1);if(grid[i][j]>grid[i+1][j-1])dp[i][j]=max(dp[i][j],dp[i+1][j-1]+1);}if(j+1==dp[i][j])maxzhi=max(maxzhi,dp[i][j]);}}for(int i=0;i<n;++i){for(int j=0;j<m;++j){cout<<dp[i][j]<<"  ";}cout<<"\n";}return maxzhi-1;}
};

结果

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

K8s-CRD实战

CRD CRD的全称是CustomResourceDefinition,是Kubernetes为提高可扩展性, 让开发者去自定义资源&#xff08;如Deployment&#xff0c;StatefulSet等&#xff09;的一种方法. Controller controller是由controller-manager进行管理&#xff0c;通过API Server提供的接口实时监…

Leetcode 79. 单词搜索

心路历程&#xff1a; 做完这道题才发现是回溯&#xff0c;一开始想的是递归&#xff0c;判断完第i个字符后&#xff0c;只需要挨个判断第i1个字符在不在第i个字符的邻域。后来发现由于不能重复使用元素&#xff0c;所以需要维护一个visited列表&#xff0c;并且在遍历所有可能…

网络安全(黑客)——2024自学

01 什么是网络安全 网络安全可以基于攻击和防御视角来分类&#xff0c;我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术&#xff0c;而“蓝队”、“安全运营”、“安全运维”则研究防御技术。 无论网络、Web、移动、桌面、云等哪个领域&#xff0c;都有攻与防两面…

python打开文件并读取文件内容(python readlines读取文件内容)

通过open 方法打开 test .py 文件&#xff0c;以读“ r ”的方式打开。通过 调用readlines() 方法逐行的来读取文件。中的数据 try的语句块中&#xff0c;用 for 循环来逐行的打印 test.py 文件中的数据&#xff0c;每循环一次休眠一下。在 finally 语句块中执行文件的 clos…

主键约束

Oracle从入门到总裁:​​​​​​https://blog.csdn.net/weixin_67859959/article/details/135209645 主键约束可以看成是非空约束再加上唯一约束 也就是说设置为主键列&#xff0c;不能为空&#xff0c;不能重复 像一般用户编号是不可能重复的&#xff0c;也不可能为空的 …

【观察】戴尔科技:软件驱动存储创新,全面拥抱AI智能时代

毫无疑问&#xff0c;数字经济已成为稳增长促转型&#xff0c;推动中国经济高质量发展的重要引擎。根据信通院发布的《中国数字经济发展研究报告&#xff08;2023&#xff09;》显示&#xff0c;2022年&#xff0c;我国数字经济规模首次突破50万亿元&#xff0c;达到50.2万亿元…