LeetCode 329. 矩阵中的最长递增路径--排序后动态规划

本文详细介绍了如何解决矩阵中最长递增路径的问题,通过构造结构体存储位置信息,利用排序和动态规划的方法更新最大路径长度。代码示例中展示了具体的实现过程,包括对相邻元素的检查和状态转移方程。该问题的核心在于保证路径的单调递增性和有效的空间优化。
摘要由CSDN通过智能技术生成
  1. 矩阵中的最长递增路径

给定一个 m x n 整数矩阵 matrix ,找出其中 最长递增路径 的长度。

对于每个单元格,你可以往上,下,左,右四个方向移动。 你 不能 在 对角线 方向上移动或移动到 边界外(即不允许环绕)。

示例 1:
在这里插入图片描述

输入:matrix = [[9,9,4],[6,6,8],[2,1,1]]
输出:4
解释:最长递增路径为 [1, 2, 6, 9]。

示例 2:

输入:matrix = [[3,4,5],[3,2,6],[2,2,1]]
输出:4
解释:最长递增路径是 [3, 4, 5, 6]。注意不允许在对角线方向上移动。

示例 3:

输入:matrix = [[1]]
输出:1

提示:

m == matrix.length
n == matrix[i].length
1 <= m, n <= 200
0 <= matrix[i][j] <= 231 - 1

题解

比较直白,因为严格要求了只能递增,所以保证了方向的单调性,于是我们定义结构体保存每个位置的数据大小和位置,按数据大小排序,再动态规划更新,比较简单。

AC代码

class Solution {
public:
    struct Node
    {
        int x,y,val;
    };
    vector<Node>q;
    static int cmp(Node a1,Node a2)
    {
        return a1.val<a2.val;
    }
    int dp[205][205];
    int xx[4]={0,0,-1,1};
    int yy[4]={-1,1,0,0};
    int longestIncreasingPath(vector<vector<int>>& matrix) {
        for(int i=0;i<matrix.size();i++)
        {
            for(int j=0;j<matrix[0].size();j++)
            {
                Node t;
                t.x=i,t.y=j,t.val=matrix[i][j];
                q.push_back(t);
            }
        }
        sort(q.begin(),q.end(),cmp);
        memset(dp,0,sizeof(dp));
        int mx=0;
        for(int i=0;i<q.size();i++)
        {
            int base=0;
            for(int j=0;j<4;j++)
            {
                int X=q[i].x+xx[j];
                int Y=q[i].y+yy[j];
                if(X<0||X>=matrix.size()||Y<0||Y>=matrix[0].size())continue;
                if(matrix[X][Y]<q[i].val)//确保周围的某个元素比自己小才能更新
                base=max(base,dp[X][Y]);
            }
            dp[q[i].x][q[i].y]=max(dp[q[i].x][q[i].y],base+1);
            mx=max(mx,dp[q[i].x][q[i].y]);
        }
        return mx;
    }
};

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值