cde网站_zaqxswcde

cde网站_zaqxswcde给定一个 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]。注意

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

给定一个 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

  1. 拓扑排序
const int N = 4e4 + 10;
const int M = 4 * N;
const int INF = 0x3f3f3f3f;
class Solution { 
   
public:
    int dx[4] = { 
   0,1,0,-1},dy[4] = { 
   -1,0,1,0};
    int n,m;
    struct Edge{ 
   
        int v,next;
    }edge[M];
    int head[N],cnt;
    void add(int u,int v){ 
   
        edge[cnt].v = v;
        edge[cnt].next = head[u];
        head[u] = cnt ++;
    }
    int in[N];
    int q[N],hh = 0,tt = 0;
    int dist[N];
    int get(int x,int y){ 
   
        return x * m + y;
    }
    int topsort(){ 
   
        memset(dist,0,sizeof dist);
        for(int i = 0;i < n * m;i ++){ 
   
            if(in[i] == 0)q[tt ++] = i,dist[i] = 0;
        }
        while(hh != tt){ 
   
            int t = q[hh ++];
            if(hh == N)hh = 0;
            for(int i = head[t];~i;i = edge[i].next){ 
   
                int v = edge[i].v;
                dist[v] = max(dist[v],dist[t] + 1);
                in[v] --;
                if(in[v] == 0){ 
   
                    q[tt ++] = v;
                    if(tt == N)tt = 0;
                }
            }
        }
        int res = 0;
        for(int i = 0;i < n * m;i ++)res = max(res,dist[i]);
        return res + 1;
    }
    int longestIncreasingPath(vector<vector<int>>& matrix) { 
   
        n = matrix.size(),m = matrix[0].size();
        memset(head,-1,sizeof head);
        cnt = 0;
        for(int i = 0;i < n;i ++){ 
   
            for(int j = 0;j < m;j ++){ 
   
                for(int k = 0;k < 4;k ++){ 
   
                    int a = i + dx[k],b = j + dy[k];
                    if(a < 0 || a >= n || b < 0 || b >= m)continue;
                    if(matrix[i][j] > matrix[a][b]){ 
   
                        add(get(i,j),get(a,b));
                        in[get(a,b)] ++;
                    }
                }
            }
        }
        int ans = topsort();
        return ans;
    }
};
  1. 记忆化搜索
const int N = 210;
class Solution { 
   
public:
    int rem[N][N];
    bool st[N][N];
    int n,m;
    int dx[4] = { 
   0,1,0,-1},dy[4] = { 
   -1,0,1,0};
    int dfs(int i,int j,vector<vector<int>>& matrix){ 
   
        int &r = rem[i][j];
        int ma = 0;
        if(r > 0)return r;
        for(int k = 0;k < 4;k ++){ 
   
            int a = i + dx[k],b = j + dy[k];
            if(a < 0 || a >= n || b < 0 || b >= m || matrix[i][j] >= matrix[a][b])continue;
            ma = max(ma,dfs(a,b,matrix));
        }
        r = ma + 1;
        return r;
    }
    int longestIncreasingPath(vector<vector<int>>& matrix) { 
   
        n = matrix.size(),m = matrix[0].size();
        int res = 0;
        for(int i = 0;i < n;i ++){ 
   
            for(int j = 0;j < m;j ++){ 
   
                res = max(res,dfs(i,j,matrix));
            }
        }
        return res;
    }
};
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/168541.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 【nodejs】node不是内部或外部命令

    【nodejs】node不是内部或外部命令

    2021年10月1日
  • python语言中变量的命名规则是什么_Python中变量的命名规则

    python语言中变量的命名规则是什么_Python中变量的命名规则讲解对象:Python中变量的命名规则作者:融水公子rsgz➢>变量的命名理解Python需要使用标识符给变量命名,其实标识符就是用于给程序中变量、类、方法命名的符号(简单来说,标识符就是合法的名字)。➢>命名要求Pvthon语言的标识符必须以字母、下画线()开头,后面可以跟任意数目的字母、数字和下画线➢>注意此处的字母并不局限于26个英文字母可以包含中文字符、日文字符等…

    2022年5月4日
  • 番茄时间计时器_番茄计时器怎么调时间

    番茄时间计时器_番茄计时器怎么调时间今天读书学到个番茄时间,不想下app,写了个html,在手机上打开,横屏,是一样的计时效果。方法很笨,问题很多,勉强能用。因为很简陋,没有调,如果不按顺序按键,可能崩溃。1.先选时间,30分钟

    2022年8月2日
  • vim命令搜索_linux打开vim编辑器

    vim命令搜索_linux打开vim编辑器尽管目前我们已经涉及Vim的多种特性,但此编辑器的特性集如此庞大,不管我们学习多少,似乎仍然远远不足。承接我们的Vim教程系列,本文我们将讨论Vim提供的多种搜索技术。不过在此之前,请注意文中涉及到的所有的例子、命令、指令均是在Ubuntu14.04,Vim7.4下测试的。Vim中的基础搜索操作当你在Vim中打开一个文件并且想要搜索一个特定的单词或模板,第一步你必须要先按…

    2022年9月24日
  • 《Linux内核设计与实现》读书笔记(十六)- 页高速缓存和页回写

    《Linux内核设计与实现》读书笔记(十六)- 页高速缓存和页回写

    2022年3月7日
  • VC6下的platform SDK安装方法[通俗易懂]

    VC6下的platform SDK安装方法[通俗易懂]最近要用到winpcap控件做个网络抓包的工具,把源码下载下来之后,文件包里面有源码,驱动,例子,lib等,装上驱动之后,运行例子,提示出现打不开IPHlpApi.Lib文件的错误,百度一下,原来是没有安装platformSDKforinternet,于是下载platformSDK,在网上找了好长时间,终于找到合适的了,因为据说现在最新版本不支持VC6了,所以比较不好找,platform

    2022年5月13日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号