当前位置: 首页 > news >正文

矩阵中的最长递增路径

题目链接

矩阵中的最长递增路径

题目描述


注意点

  • 不能 在 对角线 方向上移动或移动到 边界外(即不允许环绕)

解答思路

  • 因为最长递增路径一定是连续的,所以想到使用深度优先遍历来做。如果只使用深度优先遍历会导致超时(同一个节点的最长递增路径可能会计算多次),所以考虑引入动态规划存储每个节点的最长递增路径。除此之外,还要进行剪枝,主要是解决边界问题和移动后的值小于当前值的情况

代码

class Solution {int row;int col;int[][] directions;public int longestIncreasingPath(int[][] matrix) {int res = 0;row = matrix.length;col = matrix[0].length;directions = new int[][] {{-1, 0}, {1, 0}, {0, -1}, {0, 1}};int[][] dp = new int[row][col];for (int i = 0; i < row; i++) {for (int j = 0; j < col; j++) {res = Math.max(res, findMaxPath(matrix, dp, i, j));}}return res;}public int findMaxPath(int[][] matrix, int[][] dp, int i, int j) {if (dp[i][j] != 0) {return dp[i][j];}int maxPath = 0;for (int[] direction : directions) {int x = i + direction[0];int y = j + direction[1];if (x < 0 || x >= row || y < 0 || y >= col) {continue;}if (matrix[x][y] <= matrix[i][j]) {continue;}maxPath = Math.max(maxPath, findMaxPath(matrix, dp, x, y));}dp[i][j] = maxPath + 1;return dp[i][j];}
}

关键点

  • 深度优先遍历的思想
  • 动态规划的思想
  • 注意边界问题
http://www.lryc.cn/news/277832.html

相关文章:

  • vue2 element 弹出框拖拽会出现一层阴影问题
  • idea git回滚之前提交记录
  • 什么是Modbus协议?
  • 222.【2023年华为OD机试真题(C卷)】分配土地(扫描线算法-JavaPythonC++JS实现)
  • Linux网络编程(一-网络相关知识点)
  • IO进程线程day5
  • 读元宇宙改变一切笔记04_网络化
  • 用Promise实现util函数
  • 使用numpy处理图片——白色背景变全透明
  • 计算机网络层之ICMP与IGMP
  • FlinkAPI开发之自定义函数UDF
  • 阿里云国际服务器设置安全防护程序
  • C++获取内存使用情况
  • CRMEB多商户短信开发
  • Leetcode 1049 最后一块石头的重量II
  • 【设计模式之美】SOLID 原则之二:开闭原则方法论、开闭原则如何取舍
  • Kafka 基本概念和术语
  • 【每日面试题】Docker常见面试题精选
  • uniapp项目怎么删除顶部导航栏
  • Midjourney词库
  • 【微服务】springcloud集成skywalking实现全链路追踪
  • openssl3.2 - 官方dmeo学习 - server-cmod.c
  • websocket介绍并模拟股票数据推流
  • Python获取本机IP
  • HTTP 3xx状态码:重定向的场景与区别
  • LangChain 69 向量数据库Pinecone入门
  • 解决STM32F7系列芯片TIM无法触发ADC采样的问题
  • 观察者设计模式
  • 创建mysql普通用户
  • 基于多反应堆的高并发服务器【C/C++/Reactor】(中)完整代码