java某个起点出发的最长路径_【leetcode-动态规划】矩阵中的最长递增路径
【leetcode-动态规划】矩阵中的最长递增路径
题目:
给定一个整数矩阵,找出最长递增路径的长度。
对于每个单元格,你可以往上,下,左,右四个方向移动。 你不能在对角线方向上移动或移动到边界外(即不允许环绕)。
示例 1:
输入: nums =
[
[9,9,4],
[6,6,8],
[2,1,1]
]
输出: 4
解释: 最长递增路径为
[1, 2, 6, 9]
。
示例 2:
输入: nums =
[
[3,4,5],
[3,2,6],
[2,2,1]
]
输出: 4
解释: 最长递增路径是
[3, 4, 5, 6]
。注意不允许在对角线方向上移动。
思路:
DFS+dp
1、dp[i][j]表示数组中以(i,j)为起点的最长递增路径的长度,初始将dp数组都赋为0,
2、递归调用时,遇到某个位置(x, y), 如果dp[x][y]不为0的话,我们直接返回dp[x][y]即可,不需要重复计算。
3、以数组中每个位置都为起点调用递归来做,比较找出最大值。在以一个位置为起点用DFS搜索时,对其四个相邻位置进行判断,
如果相邻位置的值大于上一个位置,则对相邻位置继续调用递归,并更新一个最大值,搜素完成后返回即可。
java代码:
class Solution {
private int[][] paths = {{0,1},{0,-1},{1,0},{-1,0}};
public int longestIncreasingPath(int[][] matrix) {
if (matrix == null || matrix.length <= 0 || matrix[0].length <= 0) {
return 0;
}
int max = 0;
int row = matrix.length;
int col = matrix[0].length;
int[][] dp = new int[row][col];
for (int i=0; i
for (int j=0; j
max = Math.max(max, dfs(matrix, dp, row, col, i, j));
}
}
return max;
}
private int dfs(int[][] matrix, int[][] dp, int row, int col, int i, int j) {
if (dp[i][j] > 0) {
return dp[i][j];
}
int max = 1;
for (int[] path : paths) {
int x = i + path[0];
int y = j + path[1];
// 可以继续搜索
if (x >= 0 && x = 0 && y < col && matrix[x][y] > matrix[i][j]) {
int len = 1 + dfs(matrix, dp, row, col, x, y);
max = Math.max(max, len);
}
}
dp[i][j] = max;
return max;
}
}
java某个起点出发的最长路径_【leetcode-动态规划】矩阵中的最长递增路径相关推荐
- LeetCode 329. 矩阵中的最长递增路径(记忆化递归)
文章目录 1. 题目 2. 解题 2.1 记忆化递归 2.2 拓扑排序 1. 题目 给定一个整数矩阵,找出最长递增路径的长度. 对于每个单元格,你可以往上,下,左,右四个方向移动. 你不能在对角线方向 ...
- python找到一行单词中最长的_如何在文本文件中找到最长的单词?
当前代码返回文本文件中最长的一行,即句号. 如果您想要最长的一行是某个输入字符串的anagram,则需要获取一个输入字符串,并过滤掉不是anagram的行. 因为您指定了不存在重复字母,所以检查两个单 ...
- 329. Longest Increasing Path in a Matrix 矩阵中的最长递增路径
给定一个整数矩阵,找出最长递增路径的长度. 对于每个单元格,你可以往上,下,左,右四个方向移动. 你不能在对角线方向上移动或移动到边界外(即不允许环绕). 示例 1: 输入: nums = [[9,9 ...
- 矩阵中的最长递增路径
矩阵中的最长递增路径 文章目录 矩阵中的最长递增路径 一.问题描述 **方法一:朴素的深度优先搜索 [超时]** **方法二:记忆化深度优先搜索 [通过]** **方法三:动态规划** **方法四:广 ...
- 329. 矩阵中的最长递增路径
2020-06-09 1.题目描述 矩阵中的最长递增路径 2.题解 在这里我们可以将其视作有向图,如果当前的数比其四周位置上的数要小的话,就构建一条从当前数指向其 周围的边,要求得最长的递增路径,那么 ...
- LeetCode—5757. 矩阵中最大的三个菱形和(Get Biggest ...)[中等]—分析及代码(Java)
LeetCode--5757. 矩阵中最大的三个菱形和[Get Biggest Three Rhombus Sums in a Grid][中等]--分析及代码[Java] 一.题目 二.分析及代码 ...
- 算法-------矩阵中的最长递增路径(Java版本)
题目 给定一个整数矩阵,找出最长递增路径的长度.对于每个单元格,你可以往上,下,左,右四个方向移动. 你不能在对角线方向上移动或移动到边界外(即不允许环绕).示例 1:输入: nums = [[9,9 ...
- leetcode329. 矩阵中的最长递增路径(dfs)
给定一个整数矩阵,找出最长递增路径的长度.对于每个单元格,你可以往上,下,左,右四个方向移动. 你不能在对角线方向上移动或移动到边界外(即不允许环绕).示例 1:输入: nums = [[9,9,4] ...
- 329 矩阵中的最长递增路径
题目描述: 给定一个整数矩阵,找出最长递增路径的长度. 对于每个单元格,你可以往上,下,左,右四个方向移动. 你不能在对角线方向上移动或移动到边界外(即不允许环绕). 示例 1: 输入: nums = ...
最新文章
- 【流媒體】jrtplib—VS2010下RTP开源协议库JRTPLIB3.9.1编译
- 余额宝技术架构读后感
- sqlserver查询自定义的函数
- 如何用Asp判断你的网站的虚拟物理路径
- MySQL 语句外键 连接
- [vue] 你们项目为什么会选vue而不选择其它的框架呢?
- linux查看hid设备,linux hid设备读写
- winform + INotifyPropertyChanged + IDataErrorInfo + ErrorProvider实现自动验证功能
- 数字全息实验-实例演示
- NoSQL数据库原理与应用
- 苏州大学与东华大学计算机哪个好,选哪所大学好?东华大学和苏州大学对比
- IE(11)浏览器清理缓存方法
- fir302c虚拟服务器,斐讯 FIR302C 无线路由器WDS无线桥接设置
- 办公协同:xmind8案例实战班-Array老师-专题视频课程
- 程序员工资真的很高么,月入几万的难道不是吹牛?
- 华为云--欧拉操作系统
- 实验七 磁盘调度算法的模拟与实现
- C#个人博客系统源码(前台+后台管理)
- 积木Sketch插件进阶开发指南
- 有关DLNA的一个讲座
热门文章
- 水滴石穿C语言之声明的语法
- 想都不敢想!这8个神奇“黑科技”原来已经有人弄出来了
- 抱歉,程序员的工作不能用时间来衡量
- 性能优化(8):使用javascript缓存查询结果
- bond4 交换机配置_CentOS 网卡配置bond4(LACP)
- c语言数组如何把一串数字存入数组_C语言经典编程题(下)
- 师弟新作 | NBT:王运浩、区健辉等综述纳米孔测序技术
- Awesome Bioinformatics:假期了,收藏学习吧!
- Nat Commun|单细胞ATAC-seq深度学习工具包AtacWorks,简单、高效且适用
- Nature重磅综述|关于RNA-seq,你想知道的都在这(续)