问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

leetcode 329. Longest Increasing Path in a Matrix(python)

发布网友 发布时间:2024-10-01 02:30

我来回答

1个回答

热心网友 时间:2024-11-19 05:58

描述

Given an m x n integers matrix, return the length of the longest increasing path in matrix.

From each cell, you can either move in four directions: left, right, up, or down. You may not move diagonally or move outside the boundary (i.e., wrap-around is not allowed).

Example 1:

Input: matrix = [[9,9,4],[6,6,8],[2,1,1]]Output: 4Explanation: The longest increasing path is [1, 2, 6, 9].

Example 2:

Input: matrix = [[3,4,5],[3,2,6],[2,2,1]]Output: 4Explanation: The longest increasing path is [3, 4, 5, 6]. Moving diagonally is not allowed.

Example 3:

Input: matrix = [[1]]Output: 1

Note:

m == matrix.lengthn == matrix[i].length1 <= m, n <= 2000 <= matrix[i][j] <= 2^31 - 1解析

根据题意,给定一个 m x n 整数矩阵 matrix ,返回矩阵中最长递增路径的长度。从每个单元格位置可以向四个方向移动:左、右、上或下,但是不得沿对角线移动或移动到边界之外。

开始我的思路是用动态规划来做,但是发现不好写条件,只好放弃了,可能是我的方法有问题,所以后来改用常规的 DFS 来解决这道题,因为要找最长的递增路径,所以我们只需要对每个格子去进行 DFS 来找以该格子开始的最长递增路径,找完所有的格子的最长递增路径之后就知道最后的答案了。但是这里有一点需要注意,在进行 DFS 的使用要进行记忆化存储,因为很多格子的遍历都是重复的,会导致超时。

M 是行数,N 是列数,执行每个 DFS 栈深度最大为 O(MN) ,因为最长递增路径可能为 MN ,宽度为 O(4MN) ,所以每个 DFS 的时间复杂度为 O(MN) ,此时因为已经遍历了所有的节点进行了记忆化,二重循环已经没有意义,所以总的时间复杂度为 O(MN) 。

空间复杂度主要用于递归和记忆化为 O(MN) 。

解答class Solution:def longestIncreasingPath(self, matrix: List[List[int]]) -> int:M = len(matrix)N = len(matrix[0])@lru_cache(None)def dfs(i, j):if not matrix:return 0r = 1for dx, dy in [[-1, 0], [0, -1], [0, 1], [1, 0]]:if -1 < i + dx < M and -1 < j + dy < N and matrix[i + dx][j + dy] > matrix[i][j]:r = max(r, dfs(i + dx, j + dy) + 1)return rresult = 0for i in range(M):for j in range(N):t = dfs(i, j)result = max(result, t)return result运行结果Runtime: 594 ms, faster than 54.68% of Python3 online submissions for Longest Increasing Path in a Matrix.Memory Usage: 22.2 MB, less than 6.31% of Python3 online submissions for Longest Increasing Path in a Matrix.原题链接

https://leetcode.com/problems/longest-increasing-path-in-a-matrix/

您的支持是我最大的动力

原文:https://juejin.cn/post/7102977742097874957
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
李卓彬工作简历 林少明工作简历 广东工业职业技术学院怎么样 郑德涛任职简历 唐新桂个人简历 土地入股的定义 ups快递客服电话24小时 贷款记录在征信保留几年? 安徽徽商城有限公司公司简介 安徽省徽商集团新能源股份有限公司基本情况 三个姐妹头像,好看点的,最好是三种类型不一样的,比如说(请看图片) 王者荣耀裴擒虎英雄克制及英雄搭配裴擒虎克制哪些 姐妹头像两张(两张图片上的人不一样但是是姐妹头像)类似下面的两张 要三张姐妹头像...带字...一张带香,一张带珊,一张带欣,还要有其他字... python多少种上台阶的方式 王者荣耀什么英雄克制裴擒虎 克制英雄分析 三人姐妹头像 不要每张一样 要像一张图片上人物每张类似的 要可爱的动... 帮我找四张姐妹头像(要求人一样的,动作不一样的) 要三姐妹的头像,最好是不同的人,同一个动作,或者李娥灯的姐妹头像,但是... 折叠洗衣机能洗大人厚外套吗 乔丹·博塔卡个人资料 乔丹·梅利什个人简介 笔记本用什么采集卡 jordan和nike什么关系 乔·乔丹个人简介 马山乡到三岔乡多少公里 现在的年轻人适合看那些书? ...九月一号想让小孩在世泽小学上小学不知道需要什么手续知道的麻烦你们... 基金持仓状态什么意思 广东省中山市沙溪镇下泽小学是公办的吗? 怎样显示侧边收藏夹栏 机器人工程专业买什么笔记本合适 百度机器人能不能根据以往的图形走势预测以后的 微信的聊天记录怎样才能保存? 一汽大众捷达vs7油耗怎么样 方向盘往左打死不会回位 什么情况 方向盘不会自动回位是什么问题? 奶茶的糖分等级是如何定义的? 最近老是做梦梦见死去的亲人,从棺材里伸手捏自己鼻子,吓得不敢睡,_百... 梦见车祸,两天死人的都是亲人, 石墨基柔性接地体耐用吗?谁买过? 全自动洗衣机怎么用 自动洗衣机的使用方法怎样使用 vieco绿糖的奶瓶是哪里生产的 植物材质奶瓶是什么材质 跑跑卡丁车手游怎么换角色_跑跑卡丁车手游车手更换方法 跑跑卡丁车怎么查看角色的等级???要准确的,不看经验,只看等级,悬赏... 孩子欢快的歌曲有哪些 有没有好听的,比较欢快的歌曲? 请各位高手帮忙理解寓意 淘宝被盗后原绑定支付宝有危险吗?身份证号泄露