leetcode 2684. 矩阵中移动的最大次数

题目如下

数据范围

复制代码
本题使用常规动态规划就行,不过要注意由于有三个转移的方向,所以我们对dp数组的遍历应该是从上到下 从左到右即按列优先遍历。

通过代码

cpp 复制代码
class Solution {
public:
    int maxMoves(vector<vector<int>>& grid) {
        int n = grid.size();
        int m = grid[0].size();
        vector<vector<int>> dp(n,vector<int>(m,0));
        int ans = 0;
     
        for(int j = 1;j < m;j++){
            for(int i = 0;i < n;i++){
                
                if(j > 0 && grid[i][j] > grid[i][j - 1])dp[i][j] = max(dp[i][j],dp[i][j - 1] + 1);
                if(j > 0 && i > 0 && grid[i][j] > grid[i - 1][j - 1])dp[i][j] = max(dp[i][j],dp[i - 1][j - 1] + 1);
                if(j > 0 && i + 1 < n && grid[i][j] > grid[i + 1][j - 1])dp[i][j] = max(dp[i][j],dp[i + 1][j - 1] + 1);             if(dp[i][j] == 0)dp[i][j] = -1000000;
                //对于到不了的地方应该标记以防被后面的块作为有效路径算入
                ans = max(ans,dp[i][j]);
                
            }
            
        }
        /*for(int i = 0;i < n;i++){
            for(int j = 0;j < m;j++){
                cout << dp[i][j] << " ";
            }
            cout << endl;
        }*/
        return ans;
    }
};
//tips 当然本题同样可以利用滚动数组的思想用一维数组来存储上一轮的数组 这里不多赘述
相关推荐
liu****8 分钟前
13.POSIX信号量
linux·开发语言·c++·算法·1024程序员节
熬夜敲代码的小N11 分钟前
仓颉ArrayList动态数组源码分析:从底层实现到性能优化
数据结构·python·算法·ai·性能优化
ChoSeitaku41 分钟前
线代强化NO4|行列式的计算
线性代数·机器学习·矩阵
9ilk1 小时前
【基于one-loop-per-thread的高并发服务器】--- 自主实现HttpServer
linux·运维·服务器·c++·笔记·后端
大白的编程日记.1 小时前
【高阶数据结构学习笔记】高阶数据结构之B树B+树B*树
数据结构·笔记·学习
Kt&Rs1 小时前
11.9 LeetCode 题目汇总与解题思路
算法·leetcode
ゞ 正在缓冲99%…2 小时前
leetcode1547.切棍子的最小成本
数据结构·算法·leetcode·动态规划
海盗猫鸥2 小时前
「C++」vector的使用及接口模拟详解
开发语言·c++
2401_841495642 小时前
【LeetCode刷题】移动零
数据结构·python·算法·leetcode·数组·双指针法·移动零
开心星人3 小时前
Leetcode hot100 Java刷题(二)
java·算法·leetcode