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 当然本题同样可以利用滚动数组的思想用一维数组来存储上一轮的数组 这里不多赘述
相关推荐
xlq223221 天前
22.多态(上)
开发语言·c++·算法
666HZ6661 天前
C语言——高精度加法
c语言·开发语言·算法
sweet丶1 天前
iOS MMKV原理整理总结:比UserDefaults快100倍的存储方案是如何炼成的?
算法·架构
D_evil__1 天前
[C++高频精进] 并发编程:线程基础
c++
云里雾里!1 天前
力扣 209. 长度最小的子数组:滑动窗口解法完整解析
数据结构·算法·leetcode
Mr_WangAndy1 天前
C++17 新特性_第二章 C++17 语言特性_std::any和string_view
c++·string_view·c++40周年·c++17新特性·c++新特性any
CoderYanger1 天前
递归、搜索与回溯-穷举vs暴搜vs深搜vs回溯vs剪枝:12.全排列
java·算法·leetcode·机器学习·深度优先·剪枝·1024程序员节
憨憨崽&1 天前
进击大厂:程序员必须修炼的算法“内功”与思维体系
开发语言·数据结构·算法·链表·贪心算法·线性回归·动态规划
水天需0101 天前
C++ 三种指针转换深度解析
c++
chem41111 天前
C 语言 函数指针和函数指针数组
c语言·数据结构·算法