摘要:题目要求思路和代码这里采用广度优先算法加上缓存的方式来实现。我们可以看到,以一个节点作为开始构成的最长路径长度是确定的。因此我们可以充分利用之前得到的结论来减少重复遍历的次数。
题目要求
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.思路和代码
这里采用广度优先算法加上缓存的方式来实现。我们可以看到,以一个节点作为开始构成的最长路径长度是确定的。因此我们可以充分利用之前得到的结论来减少重复遍历的次数。
public class LongestIncreasingPathinaMatrix_329 { //缓存 int max = 1; public int longestIncreasingPath(int[][] matrix) { if(matrix==null || matrix.length==0 || matrix[0].length == 0) return 0; int[][] cache = new int[matrix.length][matrix[0].length]; for(int i = 0 ; i0) return cache[i][j]; int max = 1; int cur = matrix[i][j]; //如果上方的元素存在且大于当前值,则获取上方元素作为开头的最长路径的长度 if(i>0 && matrix[i-1][j] > cur){ max = Math.max(max, longestIncreasingPath(matrix, i-1, j, cache) + 1); } //如果下方的元素存在且大于当前的值,则获取下方元素作为开头的最长路径的长度 if(i cur){ max = Math.max(max, longestIncreasingPath(matrix, i+1, j, cache) + 1); } //如果左侧元素存在且大于当前的值,则获取左侧元素作为开头的最长路径的长度 if(j>0 && matrix[i][j-1] > cur){ max = Math.max(max, longestIncreasingPath(matrix, i, j-1, cache) + 1); } //如果右侧元素存在且大于当前的值,则获取右侧元素作为开头的最长路径的长度 if(j cur){ max = Math.max(max, longestIncreasingPath(matrix, i, j+1, cache) + 1); } //加入缓存 cache[i][j] = max; return max; } }
想要了解更多开发技术,面试教程以及互联网公司内推,欢迎关注我的微信公众号!将会不定期的发放福利哦~
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/71044.html
摘要:复杂度思路为了避免搜索已经搜索的点。所以考虑用一个数组,记录到每一个点能产生的最长序列的长度。考虑用进行搜索,对于每一个点来说,考虑先找到最小的那个点针对每一条路径的。然后对于每一点再递增回去,依次累积找到增加的值。 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...
摘要:题目解答最重要的是用保存每个扫过结点的最大路径。我开始做的时候,用全局变量记录的没有返回值,这样很容易出错,因为任何一个用到的环节都有可能改变值,所以还是在函数中定义,把当前的直接返回计算不容易出错。 题目:Given an integer matrix, find the length of the longest increasing path. From each cell, y...
阅读 942·2023-04-25 23:50
阅读 1915·2021-11-19 09:40
阅读 543·2019-08-30 13:50
阅读 2701·2019-08-29 17:11
阅读 1026·2019-08-29 16:37
阅读 2965·2019-08-29 12:54
阅读 2778·2019-08-28 18:17
阅读 2609·2019-08-26 16:55