[Leetcode][第329题][JAVA][矩阵中的最长递增路径][DFS][拓扑排序]

【问题描述】[中等]

在这里插入图片描述

【解答思路】

1. 记忆化深度优先搜索

在这里插入图片描述

复杂度
在这里插入图片描述

class Solution {public int[][] dirs = {{-1, 0}, {1, 0}, {0, -1}, {0, 1}};public int rows, columns;public int longestIncreasingPath(int[][] matrix) {if (matrix == null || matrix.length == 0 || matrix[0].length == 0) {return 0;}rows = matrix.length;columns = matrix[0].length;int[][] memo = new int[rows][columns];int ans = 0;for (int i = 0; i < rows; ++i) {for (int j = 0; j < columns; ++j) {ans = Math.max(ans, dfs(matrix, i, j, memo));}}return ans;}public int dfs(int[][] matrix, int row, int column, int[][] memo) {if (memo[row][column] != 0) {return memo[row][column];}++memo[row][column];for (int[] dir : dirs) {int newRow = row + dir[0], newColumn = column + dir[1];if (newRow >= 0 && newRow < rows && newColumn >= 0 && newColumn < columns && matrix[newRow][newColumn] > matrix[row][column]) {memo[row][column] = Math.max(memo[row][column], dfs(matrix, newRow, newColumn, memo) + 1);}}return memo[row][column];}
}
2. 拓扑排序

在这里插入图片描述

复杂度
在这里插入图片描述

class Solution {public int[][] dirs = {{-1, 0}, {1, 0}, {0, -1}, {0, 1}};public int rows, columns;public int longestIncreasingPath(int[][] matrix) {if (matrix == null || matrix.length == 0 || matrix[0].length == 0) {return 0;}rows = matrix.length;columns = matrix[0].length;int[][] outdegrees = new int[rows][columns];//初始化度 度递增for (int i = 0; i < rows; ++i) {for (int j = 0; j < columns; ++j) {for (int[] dir : dirs) {int newRow = i + dir[0], newColumn = j + dir[1];if (newRow >= 0 && newRow < rows && newColumn >= 0 && newColumn < columns && matrix[newRow][newColumn] > matrix[i][j]) {++outdegrees[i][j];}}}}//边界条件入度 相关点进行递减Queue<int[]> queue = new LinkedList<int[]>();for (int i = 0; i < rows; ++i) {for (int j = 0; j < columns; ++j) {if (outdegrees[i][j] == 0) {queue.offer(new int[]{i, j});}}}int ans = 0;while (!queue.isEmpty()) {++ans;int size = queue.size();for (int i = 0; i < size; ++i) {int[] cell = queue.poll();int row = cell[0], column = cell[1];for (int[] dir : dirs) {int newRow = row + dir[0], newColumn = column + dir[1];if (newRow >= 0 && newRow < rows && newColumn >= 0 && newColumn < columns && matrix[newRow][newColumn] < matrix[row][column]) {--outdegrees[newRow][newColumn];if (outdegrees[newRow][newColumn] == 0) {queue.offer(new int[]{newRow, newColumn});}}}}}return ans;}
}

【总结】

1. 拓扑排序模板

定边界 - 入队 - 出队 层数即为答案

2.dfs 记忆化搜索 避免超时

转载链接:https://leetcode-cn.com/problems/longest-increasing-path-in-a-matrix/solution/ju-zhen-zhong-de-zui-chang-di-zeng-lu-jing-by-le-2/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/425109.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

code1928: 日期差值 技巧模拟

1928: 日期差值 时间限制: 1 Sec 内存限制: 32 MB 题目描述 有两个日期&#xff0c;求两个日期之间的天数&#xff0c;如果两个日期是连续的我们规定他们之间的天数为两天。 输入 有多组数据&#xff0c;每组数据有两行&#xff0c;分别表示两个日期&#xff0c;形式为YYYYMMD…

第二十八期:阿里云VS腾讯云 谁才是中国未来的云计算之王?

阿里云早在 2009 年就已经开始布局云计算领域&#xff0c;具有先发优势。据统计&#xff0c;40% 的中国 500 强企业、近一半中国上市公司、80% 中国科技类公司是阿里云的客户。而腾讯云基于腾讯自身在游戏、视频、社交、出行等业务的强势地位&#xff0c;一路奋起直追&#xff…

[小技巧][JAVA][转换]字符数组char[]与字符串String之间互相转换

1.字符数组转为字符串 方法1&#xff1a;直接在构造String时转换。 char[] data {‘a’, ‘b’, ‘c’}; String str new String(data);方法2&#xff1a;调用String类的方法转换。 String s String.valueOf(char[] ch)2.字符串转为字符数组 情况一&#xff1a;如果是”a…

CentOS 7 Apache服务的安装与配置(转)

https://blog.51cto.com/13525470/2070375 一、Apache简介 Apache 是一个知名的开源Web服务器。早期的Apache服务器由Apache Group来维护&#xff0c;直到1999年6月Apache Group在美国德拉瓦市成立了非盈利性组织的公司&#xff0c;即Apache软件基金会&#xff08;Apache Softw…

第二十九期:全球首部AI交响变奏曲问世,AI技术应用再拓边界

人工智能技术&#xff0c;史上第一次升级到了复杂音乐的创作领域&#xff1a;交响曲。 全球首部 AI 交响变奏曲《我和我的祖国》&#xff0c;昨晚已由深圳交响乐团全球首演&#xff0c;它的出品方是中国平安人工智能研究院。 此前&#xff0c;你可能了解过 Google 的 Magenta、…

[小技巧][JAVA][转换]整型int与字符串String相互转换

字符串转换整型String - >Int 1). int i Integer.parseInt([String]); 或者 //radix 进制 int i Integer.parseInt([String],[int radix]); //intValue() 输出int数据。 2). int i Integer.valueOf(String).intValue(); 或者 int i Integer.valueOf(String);整型转换字…

codeup 2044 暴力搜索

2044: 神奇的口袋 时间限制: 1 Sec 内存限制: 32 MB 提交: 735 解决: 333 [提交][状态][讨论版][命题人:外部导入] 题目描述 有一个神奇的口袋&#xff0c;总的容积是40&#xff0c;用这个口袋可以变出一些物品&#xff0c;这些物品的总体积必须是40。John现在有n个想要得到…

MySql DDL语言(数据库和数据表的管理)

数据定义语言&#xff0c;负责数据库和数据表的管理 ⒈数据库的管理 1.创建数据库    1 create database if not exists DatabaseName; #if not exists可以省略 2.修改数据库 ①重命名数据库名称&#xff08;已经废弃&#xff0c;强制修改只能到数据库指向的文件夹重命名…

第三十期:BAT 为什么都看上了重庆?

一个城市朝向智能化创新的方向发展&#xff0c;一把手的重视是非常重要的。 文&#xff1a;I/O 重庆&#xff0c;作为我国中西部地区唯一的直辖市和国家中心城市&#xff0c;正在新一轮科技发展浪潮中扮演着越来越亮眼的角色。 尤其是近两个月来&#xff0c;重庆在推动科技创新…

codeup 1128: 出租车费 贪心|找规律

1128: 出租车费 时间限制: 1 Sec 内存限制: 32 MB 提交: 871 解决: 299 [提交][状态][讨论版][命题人:外部导入] 题目描述 某市出租车计价规则如下&#xff1a;起步4公里10元&#xff0c;即使你的行程没超过4公里&#xff1b;接下来的4公里&#xff0c;每公里2元&#xff1b;之…

[Java基础][Java]toString()方法

【原理解析】 toString()方法返回反映这个对象的字符串 因为toString方法是Object里面已经有了的方法&#xff0c;而所有类都是继承Object&#xff0c;所以“所有对象都有这个方法”。 它通常只是为了方便输出&#xff0c;比如System.out.println(xx)&#xff0c;括号里面的…

MySQL系列--4.使用Python3访问数据库

1、安装MySQL驱动 pip install mysql-connector 安装完成后进入命令行模式&#xff0c;导入驱动&#xff0c;如果不报错&#xff0c;说明安装成功 Python 3.6.7 (default, Oct 22 2018, 11:32:17) [GCC 8.2.0] on linux Type "help", "copyright", "…

第三十一期:世界上有四类人永远不可能成为编程界牛人(个人见解,欢迎补充)

本人歌谣&#xff0c;出来工作也有两年了。大学挂科无数&#xff0c;出来想搞技术。平时也就是以工作学习的知识为主&#xff0c;无聊的时候就会学习一些关于科技的知识。 在这本人给大家传授一些学习编程的心得体会&#xff0c;供大家分享交流&#xff1a; 1.没有专注力和恒心…

[Java]==和equals()的区别(按照数据类型区分)

背景知识 【引用类型】 复合数据类型是引用类型 **1.基本数据类型&#xff0c;也称原始数据类型。**byte,short,char,int,long,float,double,boolean 他们之间的比较&#xff0c;应用双等号&#xff08;&#xff09;,比较的是他们的值。 基本数据类型比较&#xff0c; 和 …

某简单易懂的人脸识别 API 的开发环境搭建和简易教程

最近接了个人脸识别相关的项目&#xff0c;是基于某个非常简单易懂的人脸识别 API&#xff1a;face_recognition 做的。这个库接口非常傻瓜&#xff0c;很适合新手上手&#xff0c;而且可以研究其源码来学习 dlib 这个拥有更加灵活、强大的人脸识别功能的库。本文介绍了该 API …

第三十二期:如何摆脱「技术思维」的惯性?

虽然从标题上看&#xff0c;这篇文章是写给“技术人”的&#xff0c;但 从广义上来说&#xff0c;只要你是一位以理性见长的人&#xff0c;那么这篇文章要讲的东西可能会与你有关。 虽然从标题上看&#xff0c;这篇文章是写给“技术人”的&#xff0c;但 从广义上来说&#xff…

[Leetcode][第207题][JAVA][课程表][拓扑排序][DFS]

【问题描述】[中等] 【解答思路】 1. 拓扑排序 复杂度分析 HashSet[] 数组 import java.util.HashSet; import java.util.LinkedList; import java.util.Queue;public class Solution {public boolean canFinish(int numCourses, int[][] prerequisites) {if (numCourses &l…

codeUp 2031 To fill or not to fill 复杂贪心

2031: To Fill or Not to Fill 时间限制: 1 Sec 内存限制: 32 MB 提交: 599 解决: 132 With highways available, driving a car from Hangzhou to any other city is easy. But since the tank capacity of a car is limited, we have to find gas stations on the way fro…

RabbitMQ(1) - win+rabbitMQ

rabbitMQ是一个在AMQP协议标准基础上完整的&#xff0c;可服用的企业消息系统。它遵循Mozilla Public License开源协议&#xff0c;采用 Erlang 实现的工业级的消息队列(MQ)服务器&#xff0c;Rabbit MQ 是建立在Erlang OTP平台上。 1.安装Erlang 所以在安装rabbitMQ之前&…

[周赛][Leetcode][第5457题][JAVA][动态规划][和为奇数的子数组数目]

【问题描述】5457. 和为奇数的子数组数目[中等] 【解答思路】 1. 动态规划 第 1 步&#xff1a;设计状态 dp[i][0] 记录以arr[i]结尾的和为奇数数量 dp[i][1] 记录以arr[i]结尾的和为偶数数量 第 2 步&#xff1a;状态转移方程 for(int i1;i<n;i){if(arr[i]%20){dp[i][0]…