您的位置:首页 > 科技 > 能源 > ui设计技术培训培训班_西安到北京需要隔离吗_适合40岁女人的培训班_网络口碑营销名词解释

ui设计技术培训培训班_西安到北京需要隔离吗_适合40岁女人的培训班_网络口碑营销名词解释

2025/6/23 5:50:48 来源:https://blog.csdn.net/weixin_37253733/article/details/147247966  浏览:    关键词:ui设计技术培训培训班_西安到北京需要隔离吗_适合40岁女人的培训班_网络口碑营销名词解释
ui设计技术培训培训班_西安到北京需要隔离吗_适合40岁女人的培训班_网络口碑营销名词解释

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] <= 2 31 2^{31} 231 - 1

2 solution

本题是搜索最长递增序列,第一感觉就是深度优先搜索,如果从一个位置开始,最长递增序列的长度是多少,最后找最大值即可,但是如果直接搜索复杂度过高,所以如果某一个地方搜索过了,就保存下来,确保每一个格子只进行一次深度搜索,即所谓的记忆化深度优先搜索。

代码

class Solution {int m, n;vector<vector<int>> mat;vector<vector<int>> len;vector<int> dr = {1, -1, 0, 0};vector<int> dc = {0, 0, 1, -1};int dfs(int r, int c) {if (len[r][c]) return len[r][c];int l = 0;for (int i = 0; i < 4; i++) {int x = r + dr[i];int y = c + dc[i];if (x < 0 || x == m || y < 0 || y == n) continue;if (mat[x][y] > mat[r][c]) {l = max(l, dfs(x, y));}}return len[r][c] = l + 1;}public:int longestIncreasingPath(vector<vector<int>> &matrix) {m = matrix.size();n = matrix[0].size();len = vector<vector<int>>(m, vector<int>(n));mat = matrix;int M = 0;for (int i = 0; i < m; i++) {for (int j = 0; j < n; j++) {if (!len[i][j]) {M = max(M, dfs(i, j));}}}return M;}
};

结果

在这里插入图片描述

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com