摘要:题目解答最重要的是用保存每个扫过结点的最大路径。我开始做的时候,用全局变量记录的没有返回值,这样很容易出错,因为任何一个用到的环节都有可能改变值,所以还是在函数中定义,把当前的直接返回计算不容易出错。
题目:
Given an integer matrix, find the length of the longest increasing path.
From each cell, you can either move to four directions: left, right, up or down. You may NOT move diagonally or move outside of the boundary (i.e. wrap-around is not allowed).
Example 1:
nums = [ [9,9,4], [6,6,8], [2,1,1] ]
Return 4
The longest increasing path is [1, 2, 6, 9].
Example 2:
nums = [ [3,4,5], [3,2,6], [2,2,1] ]
Return 4
The longest increasing path is [3, 4, 5, 6]. Moving diagonally is not allowed.
解答:
最重要的是用cache保存每个扫过结点的最大路径。我开始做的时候,用全局变量记录的max, dfs没有返回值,这样很容易出错,因为任何一个用到max的环节都有可能改变max值,所以还是在函数中定义,把当前的max直接返回计算不容易出错。
public class Solution { public int DFS(int[][] matrix, int i, int j, int[][] cache) { if (cache[i][j] != 0) return cache[i][j]; //改进:记录下每一个访问过的点的最大长度,当重新访问到这个点的时候,就不需要重复计算 int[][] dir = {{0, 1}, {0, -1}, {1, 0}, {-1, 0}}; int max = 1; for (int k = 0; k < dir.length; k++) { int x = i + dir[k][0], y = j + dir[k][1]; if (x < 0 || x > matrix.length - 1 || y < 0 || y > matrix[0].length - 1) { continue; } else { if (matrix[x][y] > matrix[i][j]) { //这里当前结点只算长度1,然后加上dfs后子路径的长度,比较得出最大值 int len = 1 + DFS(matrix, x, y, cache); max = Math.max(max, len); } } } cache[i][j] = max; return max; } public int longestIncreasingPath(int[][] matrix) { if (matrix == null || matrix.length == 0 || matrix[0].length == 0) return 0; int m = matrix.length, n = matrix[0].length; int[][] cache = new int[m][n]; int max = 1; for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { int len = DFS(matrix, i, j, cache); max = Math.max(max, len); } } return max; } }
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/64917.html
摘要:题目要求思路和代码这里采用广度优先算法加上缓存的方式来实现。我们可以看到,以一个节点作为开始构成的最长路径长度是确定的。因此我们可以充分利用之前得到的结论来减少重复遍历的次数。 题目要求 Given an integer matrix, find the length of the longest increasing path. From each cell, you can ei...
摘要:复杂度思路为了避免搜索已经搜索的点。所以考虑用一个数组,记录到每一个点能产生的最长序列的长度。考虑用进行搜索,对于每一个点来说,考虑先找到最小的那个点针对每一条路径的。然后对于每一点再递增回去,依次累积找到增加的值。 LeetCode[329] Longest Increasing Path in a Matrix Given an integer matrix, find the ...
Problem Given an integer matrix, find the length of the longest increasing path. From each cell, you can either move to four directions: left, right, up or down. You may NOT move diagonally or move ou...
Problem Given an integer matrix, find the length of the longest increasing path. From each cell, you can either move to four directions: left, right, up or down. You may NOT move diagonally or move ou...
摘要:思路这道题主要使用记忆化递归和深度优先遍历。我们以给定的矩阵的每一个位置为起点,进行深度优先遍历。我们存储每个位置深度优先遍历的结果,当下一次走到这个位置的时候,我们直接返回当前位置记录的值,这样可以减少遍历的次数,加快执行速度。 Description Given an integer matrix, find the length of the longest increasing...
阅读 599·2023-04-25 18:37
阅读 2751·2021-10-12 10:12
阅读 8205·2021-09-22 15:07
阅读 542·2019-08-30 15:55
阅读 3157·2019-08-30 15:44
阅读 2176·2019-08-30 15:44
阅读 1607·2019-08-30 13:03
阅读 1539·2019-08-30 12:55