矩阵中的最长递增路径

简介: 矩阵中的最长递增路径

力扣题目

329. 矩阵中的最长递增路径

题目描述:

解题思路:

看到这题,往上,下,左,右四个方向移动单元格,我的第一反应是运用深度优先搜索,但是单单使用到深度优先搜索的结果会超出时间限制,时间复杂度过高,进行了大量的重复运算,所以这道题还需要运用动态规划来进行优化,存储以前面单元格为起点的最长递增路径的长度,减少重复的计算。

先设置数组dp[i][j]表示以单元格(i,j)为起点的最长递增路径的长度,遍历每个单元格,然后对于每个单元格,可以往上,下,左,右四个方向移动,通过设置数组来实现单元格上下左右移动时i和j的变化,我们可以对每个单元格进行深度优先搜索,当相邻的单元格b大于当前单元格时a,我们可以移动到这个相邻的单元格b。继续进行深度优先搜索,如果数组dp[i][j]不为0,那么说明当前单元格b已经被计算过,因为以单元格b为起点的递增路径,也为单元格a的递增路径的一部分,所以我们可以直接使用这个计算结果,算出单元格a的递增路径的长度,然后用fmax函数经过比较来得出最长递增路径。遍历完矩阵中的所有单元格之后,即可得到矩阵中的最长递增路径的长度。

提交的代码:

int a[4][2]={{-1,0},{1,0},{0,1},{0,-1}};
int  dfs(int **matrix,int m,int n,int x,int y,int**dp){
    if(dp[x][y]!=0){
        return dp[x][y];
    }
    dp[x][y]++;
     for(int k=0;k<4;k++){
         int xx=x+a[k][0];
         int yy=y+a[k][1];
         if(xx>=0&&xx<m&&yy>=0&&yy<n&&matrix[x][y]<matrix[xx][yy]){
              dp[x][y]=fmax(dp[x][y],dfs(matrix,m,n,xx,yy,dp)+1);
         }
     }
     return dp[x][y];
}
int longestIncreasingPath(int** matrix, int matrixSize, int* matrixColSize){
    if(matrix==NULL)
       return 0;
     int m=matrixSize,n=matrixColSize[0],i=0,j=0;
     int** dp = (int**)malloc(sizeof(int*) * m);
    for (int i = 0; i < m; i++) {
        dp[i] = (int*)malloc(sizeof(int) * n);
        memset(dp[i], 0, sizeof(int) * n);
    }
    int ans=0;
     for(i=0;i<m;i++){
         for(j=0;j<n;j++){
             ans=fmax(ans,dfs(matrix,m,n,i,j,dp));
         }
     }
     return ans;
}
目录
相关文章
|
安全 测试技术 索引
使用指针时应该注意哪些地方呢?
使用指针时应该注意哪些地方呢?
|
安全 数据库 数据安全/隐私保护
|
5天前
|
云安全 人工智能 安全
AI被攻击怎么办?
阿里云提供 AI 全栈安全能力,其中对网络攻击的主动识别、智能阻断与快速响应构成其核心防线,依托原生安全防护为客户筑牢免疫屏障。
|
14天前
|
域名解析 人工智能
【实操攻略】手把手教学,免费领取.CN域名
即日起至2025年12月31日,购买万小智AI建站或云·企业官网,每单可免费领1个.CN域名首年!跟我了解领取攻略吧~
|
8天前
|
安全 Java Android开发
深度解析 Android 崩溃捕获原理及从崩溃到归因的闭环实践
崩溃堆栈全是 a.b.c?Native 错误查不到行号?本文详解 Android 崩溃采集全链路原理,教你如何把“天书”变“说明书”。RUM SDK 已支持一键接入。
574 212
|
4天前
|
编解码 Linux 数据安全/隐私保护
教程分享免费视频压缩软件,免费视频压缩,视频压缩免费,附压缩方法及学习教程
教程分享免费视频压缩软件,免费视频压缩,视频压缩免费,附压缩方法及学习教程
229 138
|
存储 人工智能 监控
从代码生成到自主决策:打造一个Coding驱动的“自我编程”Agent
本文介绍了一种基于LLM的“自我编程”Agent系统,通过代码驱动实现复杂逻辑。该Agent以Python为执行引擎,结合Py4j实现Java与Python交互,支持多工具调用、记忆分层与上下文工程,具备感知、认知、表达、自我评估等能力模块,目标是打造可进化的“1.5线”智能助手。
812 59