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

算法第三十天-矩阵中移动的最大次数

矩阵中移动的最大次数

题目要求

在这里插入图片描述

解题思路

网格图 DFS
从第一列的任一单元格 ( i , 0 ) (i,0) (i,0) 开始递归。枚举往右上/右/右下三个方向走,如果走一步后,没有出界,且格子值大于 g r i d [ i ] [ j ] grid[i][j] grid[i][j],则可以走,继续递归。

在递归过程中,记录能访问到的最大列号,作为答案。

代码实现时,为避免重复递归之前访问过的格子,可以用一个 v i s vis vis数组标记访问过的格子。但实际上,可以把 g r i d [ i ] [ j ] grid[i][j] grid[i][j]置为 0 0 0从而无需创建 v i s vis vis数组。这是因为网格值均为正数,并且我们只能访问到比当前格子值更大的格子,所以置为 0 0 0会导致永远无法访问到该格子,这正是我们所希望的。

代码

class Solution:
    def maxMoves(self, grid: List[List[int]]) -> int:
        m,n = len(grid), len(grid[0])
        ans = 0
        def dfs(i,j):
            nonlocal ans
            ans = max(ans,j)
            if ans == n -1:
                return
            for k in i-1, i, i+1:
                if 0<= k <m and grid[k][j+1] >grid[i][j]:
                    dfs(k,j+1)
            grid[i][j] = 0
        for i in range(m):
            dfs(i,0)
        return ans

复杂度分析

  • 时间复杂度: O ( m n ) O(mn) O(mn),其中 m m m n n n 分别为 g r i d grid grid 的行数和列数。每个格子至多递归一次。
  • 空间复杂度: O ( n ) O(n) O(n)。递归需要 O ( n ) O(n) O(n)的栈空间。

参考

灵茶山艾府


http://www.kler.cn/a/273321.html

相关文章:

  • RuoYi Cloud项目解读【四、项目配置与启动】
  • 【Redis学习 | 第5篇】Redis缓存 —— 缓存的概念 + 缓存穿透 + 缓存雪崩 + 缓存击穿
  • JVM与Java体系结构
  • 【深度学习】多目标融合算法(二):底部共享多任务模型(Shared-Bottom Multi-task Model)
  • 在 WSL 中使用 Jupyter Notebook 的 TensorBoard 启动问题与解决方法
  • Trimble自动化激光监测支持历史遗产实现可持续发展【沪敖3D】
  • Android 性能优化——APP启动优化
  • 供应链投毒预警 | 开源供应链投毒202402月报发布啦
  • UnityShader(十七)透明效果
  • 基于支持向量机(svm)的人脸识别
  • Flutter-仿淘宝京东录音识别图标效果
  • 【Vue3】自定义Input组件
  • HTML5语义化元素
  • 以太坊开发学习-solidity(三)函数类型
  • 项目性能优化—使用JMeter压测SpringBoot项目
  • 【Unity】详细介绍
  • 【K8S】docker和K8S(kubernetes)理解?docker是什么?K8S架构、Master节点 Node节点 K8S架构图
  • lv17 BOA服务器搭建 4
  • YOLOv8改进 | 图像去雾 | MB-TaylorFormer改善YOLOv8高分辨率和图像去雾检测(ICCV,全网独家首发)
  • 字节-安全研究实习生--一面
  • 愚人节礼物(C++)
  • 第二十五章 Web Gateway 管理页面概述 - 可用选项
  • 详解IP安全:IPSec协议簇 | AH协议 | ESP协议 | IKE协议
  • 容器部署对比:通用容器部署 vs 使用腾讯云容器镜像服务(TCR)部署 Stable Diffusion
  • 十、MySQL主从架构配置
  • 【STL源码剖析】【2、空间配置器——allocator】