LeetCode——矩阵中移动的最大次数

这篇具有很好参考价值的文章主要介绍了LeetCode——矩阵中移动的最大次数。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

1、题目

 2、题目解读

 3、代码


1、题目

2684. 矩阵中移动的最大次数 - 力扣(Leetcode)

给你一个下标从 0 开始、大小为 m x n 的矩阵 grid ,矩阵由若干  整数组成。

你可以从矩阵第一列中的 任一 单元格出发,按以下方式遍历 grid :

  • 从单元格 (row, col) 可以移动到 (row - 1, col + 1)(row, col + 1) 和 (row + 1, col + 1) 三个单元格中任一满足值 严格 大于当前单元格的单元格。

LeetCode——矩阵中移动的最大次数

返回你在矩阵中能够 移动 的 最大 次数。

示例 1:

LeetCode——矩阵中移动的最大次数

输入:grid = [[2,4,3,5],[5,4,9,3],[3,4,2,11],[10,9,13,15]]
输出:3
解释:可以从单元格 (0, 0) 开始并且按下面的路径移动:
- (0, 0) -> (0, 1).
- (0, 1) -> (1, 2).
- (1, 2) -> (2, 3).
可以证明这是能够移动的最大次数。

示例 2:

LeetCode——矩阵中移动的最大次数

输入:grid = [[3,2,4],[2,1,9],[1,1,7]]
输出:0
解释:从第一列的任一单元格开始都无法移动。

提示:

  • m == grid.length
  • n == grid[i].length
  • 2 <= m, n <= 1000
  • 4 <= m * n <= 105
  • 1 <= grid[i][j] <= 106

 2、题目解读

题目第二个示例,第一列中的3的左边还有左下角都比3小,不能移动。2和1也是如此,所以无法移动

LeetCode——矩阵中移动的最大次数

理解题目意思,然后就是dfs,每一轮向右搜索一列。注意不要重复搜索!文章来源地址https://www.toymoban.com/news/detail-463314.html

 3、代码

class Solution {
      //dfs
    private int n;
    private int m;
    private int max=0;//保存 当前最大移动次数

    public int maxMoves(int[][] grid) {
        n=grid.length;
        m=grid[0].length;
        //vis用于剪枝操作
        boolean[][] vis = new boolean[n][m];
        for(int i=0;i<n;i++)
        {
            dfs(i,0,grid, vis);
            //如果max为m-1,已经是能达到的最大值了,无须再考虑后面的情况了
            if(max==m-1)
                break;
        }
        return max;
    }
    public void dfs(int i, int j, int[][] grid, boolean[][] vis)
    {
        //如果j达到最大值,说明可以移动到最后一列,此时就可以退出递归了
        if(j==m-1)
        {
            max=m-1;
            return;
        }
        //符合移动条件,且目标单元格还没有搜索过
        if(grid[i][j+1]>grid[i][j] && !vis[i][j + 1])
        {
            //继续搜索
            dfs(i,j+1,grid,vis);
            //并标记目标单元格已经搜索,避免重复搜索
            vis[i][j+1]=true;
        }
        //下面同理
        if(i>0 && grid[i-1][j+1]>grid[i][j] && !vis[i - 1][j + 1])
        {
            dfs(i-1,j+1,grid,vis);
            vis[i-1][j+1]=true;
        }
        if(i<n-1 && grid[i+1][j+1]>grid[i][j] && !vis[i + 1][j + 1])
        {
            dfs(i+1,j+1,grid,vis);
            vis[i+1][j+1]=true;
        }
        //全部搜索完毕后,若j值比max大,则保留该j值为最大值
        max=Math.max(max,j);
    }
}

到了这里,关于LeetCode——矩阵中移动的最大次数的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【2023】华为OD机试真题全语言-题目0232-最大子矩阵

    实现一个程序 search_matrix(matrix) ,参数 matrix 一是个仅包含 0 或 1 两种数字的矩阵, 程序应返回输入矩阵中包含的最大正方形子矩阵(长和宽相等)的区域面积。 例如:如果 matrix 是 [\\\"1010111111\\\",\\\"0000000111\\\",\\\"1010110111\\\",\\\"0000110001\\\"] 那么它看起来像下面的矩阵: 1010111 111 0000000 111 1010110

    2024年02月08日
    浏览(57)
  • Leetcode3071. 在矩阵上写出字母 Y 所需的最少操作次数

    题目来源:3071. 在矩阵上写出字母 Y 所需的最少操作次数 统计 Y 中的元素出现次数,记到一个长为 3 的数组 cnt1 中。统计不在 Y 中的元素出现次数,记到一个长为 3 的数组 cnt2 中。 计算最多可以保留多少个元素不变,设这个值为 maxNotChange。 在 0,1,2 中枚举 i 和 j,其中 i≠

    2024年03月18日
    浏览(47)
  • LeetCode 1183 矩阵中 1 的最大数量 (图解)

    题目省略了 很多题解都写的是,求正方形矩阵在原矩阵的等效位置的数量,但是不画图可能不好理解,比如我现在有个 3*3 的矩阵,需要用2*2的正方形填充 上图中我枚举了所有的点在小正方形可能出现的情况(A、B、C、D),如上图 然后我再枚举所有情况(A、B、C、D),在大

    2024年02月17日
    浏览(35)
  • 【leetcode热题100】接雨水、直方图最大矩形面积、矩阵中最大的矩形

    题目链接 题目描述: 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 示例 1: 输入:height = [0,1,0,2,1,0,1,3,2,1,2,1] 输出:6 解释:上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝

    2024年02月03日
    浏览(55)
  • 【LeetCode: 面试题 17.24. 最大子矩阵 | 动态规划 】

    🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,CSDN-Java领域优质创作者🏆,保研|国家奖学金|高中学习JAVA|大学完善JAVA开发技术栈|面试刷题|面经八股文

    2024年02月06日
    浏览(80)
  • ( 数组和矩阵) 485. 最大连续 1 的个数 ——【Leetcode每日一题】

    难度:简单 给定一个二进制数组 nums , 计算其中最大连续 1 的个数。 示例 1: 输入:nums = [1,1,0,1,1,1] 输出:3 解释:开头的两位和最后的三位都是连续 1 ,所以最大连续 1 的个数是 3. 示例 2: 输入:nums = [1,0,1,1,0,1] 输出:2 提示: 1 = n u m s . l e n g t h = 1 0 5 1 = nums.length = 10^5

    2024年02月08日
    浏览(45)
  • 详解Leetcode中关于malloc模拟开辟二维数组问题,涉及二维数组的题目所给函数中的各个参数的解读

    最近博主一直再刷Leetcode上有关c语言的题目,有些题目第一步就将我卡死了。为什么呢?因为题目中所给的函数里的参数的具体含义我既然都不知道是什么意思。当然在请教了一些大佬后我也顺利解决了,不然也不会有人和你们分享了,哈哈哈~ 我就已一个典型的题目来介绍

    2024年02月08日
    浏览(45)
  • leetcode 统计全为1的正方形子矩阵、最大正方形

    给你一个 m * n 的矩阵,矩阵中的元素不是 0 就是 1,请你统计并返回其中完全由 1 组成的 正方形 子矩阵的个数。 示例 1: 输入:matrix = [   [0,1,1,1],   [1,1,1,1],   [0,1,1,1] ] 输出:15 解释:  边长为 1 的正方形有 10 个。 边长为 2 的正方形有 4 个。 边长为 3 的正方形有 1 个

    2024年02月08日
    浏览(47)
  • SQL 最大连续合格次数 最大连胜记录次数 最大连败记录次数

    有这样一个问题,工厂中要统计某个供应商送货检验的情况,依照其连续合格次数,决定是否免检,不使用游标或者循环,如何写这个sql。 此情景也可以用于统计连胜记录等 先要学习一下 窗函数LAG,指的是按分组和排序,取到之前(before)行的值。 假如表是这样的: 建表语句

    2024年01月19日
    浏览(46)
  • 【LeetCode热题100】打卡第42天:滑动窗口最大值&搜索二维矩阵II

    大家好,我是知识汲取者,欢迎来到我的LeetCode热题100刷题专栏! 精选 100 道力扣(LeetCode)上最热门的题目,适合初识算法与数据结构的新手和想要在短时间内高效提升的人,熟练掌握这 100 道题,你就已经具备了在代码世界通行的基本能力。在此专栏中,我们将会涵盖各种

    2024年02月10日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包