【Leetcode】2684. 矩阵中移动的最大次数

文章目录

  • 题目
  • 思路
  • 代码
  • 结果

题目

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

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

从单元格 (row, col) 可以移动到 (row - 1, col + 1)、(row, col + 1) 和 (row + 1, col + 1) 三个单元格中任一满足值 严格 大于当前单元格的单元格。
返回你在矩阵中能够 移动最大 次数。

示例 1
在这里插入图片描述
输入: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
在这里插入图片描述
输入: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

思路

这道题可以使用动态规划进行完成,题目的意思就是每一次可以移动到右上角或者与右边或者是i右下角,那么我们直接反过来对左边的上中下进行选取即可, d p [ i ] [ j ] dp[i][j] dp[i][j]表示到当前位置最多要多少步,这个数字取决于前面的 d p [ i − 1 ] [ j − 1 ] dp[i-1][j-1] dp[i1][j1] d p [ i ] [ j − 1 ] dp[i][j-1] dp[i][j1] d p [ i + 1 ] [ j − 1 ] dp[i+1][j-1] dp[i+1][j1],取三者里面的最大值加一赋值给 d p [ i ] [ j ] dp[i][j] dp[i][j]。最后统计最多移动的次数的时候需要注意这样子的计算方法包含中间开始的,而题目要求的是最左边的那一列开始,所以我们可以在统计的时候加上一个条件限制,如果符合题目要求的话移动的次数刚好等于dp数组对应的列下标。

代码

class Solution {
public:
    int maxMoves(vector<vector<int>>& grid) {
        int n=grid.size(),m=grid[0].size();
        vector<vector<int>> dp(n, vector<int>(m, 0));
        int maxzhi=1;
        for(int i=0;i<n;++i)dp[i][0]=1;
        for(int j=1;j<m;++j)
        {
            for(int i=0;i<n;++i)
            {
                if(i==0)
                {
                    if(grid[i][j]>grid[i][j-1])dp[i][j]=max(dp[i][j],dp[i][j-1]+1);
                    if(grid[i][j]>grid[i+1][j-1])dp[i][j]=max(dp[i][j],dp[i+1][j-1]+1);
                }
                else if(i==n-1)
                {
                    if(grid[i][j]>grid[i-1][j-1])dp[i][j]=max(dp[i][j],dp[i-1][j-1]+1);
                    if(grid[i][j]>grid[i][j-1])dp[i][j]=max(dp[i][j],dp[i][j-1]+1);
                }
                else
                {
                    if(grid[i][j]>grid[i-1][j-1])dp[i][j]=max(dp[i][j],dp[i-1][j-1]+1);
                    if(grid[i][j]>grid[i][j-1])dp[i][j]=max(dp[i][j],dp[i][j-1]+1);
                    if(grid[i][j]>grid[i+1][j-1])dp[i][j]=max(dp[i][j],dp[i+1][j-1]+1);
                }
                if(j+1==dp[i][j])maxzhi=max(maxzhi,dp[i][j]);
            }
        }
        for(int i=0;i<n;++i)
        {
            for(int j=0;j<m;++j)
            {
                cout<<dp[i][j]<<"  ";
            }
            cout<<"\n";
        }
        return maxzhi-1;
    }
};

结果

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Flutter-仿携程首页类型切换

效果 唠叨 闲来无事&#xff0c;不小心下载了携程app&#xff0c;还幻想可以去旅游一番&#xff0c;奈何自己运气不好&#xff0c;自从高考时第一次吹空调导致自己拉肚子考试&#xff0c;物理&#xff0c;数学考了一半就交卷&#xff0c;英语2B铅笔除了问题&#xff0c;导致原…

MySQL数据库的基本概念与安装

目录 引言 一、数据库的基本概念 &#xff08;一&#xff09;数据、表与数据库 1.数据(Data) 2.表 3.数据库 &#xff08;二&#xff09;数据库管理系统 &#xff08;三&#xff09;数据库系统 二、数据库的发展 三、主流数据库的介绍 &#xff08;一&#xff09;关…

一命通关深度优先遍历

前言 在解释深度优先遍历之前&#xff0c;我想先让大家去思考一个可能从未想过的问题&#xff1a; 为什么我们在学习基础数据结构的时候&#xff0c;都没有出现dfs和bfs这两个词&#xff0c;而在学习二叉树和图的时候&#xff0c;突然蹦出了深度优先遍历和广度优先遍历这两个…

力扣 第 126 场双周赛 解题报告 | 珂学家 | 贡献法思维场 + 贪心构造 + 0-1背包

前言 整体评价 T3是道好题&#xff0c;一开始思路偏了往按字母前缀和和DP去想了&#xff0c;但是感觉很难下手&#xff0c;后来发现从贡献的角度&#xff0c;其实和位子无关系&#xff0c;只需要贪心即可。 T4也是一道贡献思路题&#xff0c;理清核心的点&#xff0c;就能简单…

Vue项目使用process.env关键字及Vue.config.js配置解决前端跨域问题

1.process.env 是Node.js 中的一个环境 1.打开命令行查看环境: 2.process.env与Vue CLI 项目 Vue Cli 有以下三种运行模式 development 模式用于 vue-cli-service serve test 模式用于 vue-cli-service test:unit production 模式用于 vue-cli-service build 和 vue-cli-se…

每日一练:LeeCode-167. 两数之和 II - 输入有序数组【双指针】

给你一个下标从 1 开始的整数数组 numbers &#xff0c;该数组已按 非递减顺序排列 &#xff0c;请你从数组中找出满足相加之和等于目标数 target 的两个数。如果设这两个数分别是 numbers[index1] 和 numbers[index2] &#xff0c;则 1 < index1 < index2 < numbers.…

如何本地部署1Panel面板

文章目录 前言1. Linux 安装1Panel2. 安装cpolar内网穿透3. 配置1Panel公网访问地址4. 公网远程访问1Panel管理界面5. 固定1Panel公网地址 前言 1Panel 是一个现代化、开源的 Linux 服务器运维管理面板。高效管理,通过 Web 端轻松管理 Linux 服务器&#xff0c;包括主机监控、…

YOLOv8改进 | 主干篇 | 利用图像分割网络UNetV2改善图像分割检测性能(全网独家首发)

一、本文介绍 本文给大家带来的改进机制是利用图像分割网络UNetV2的主干来改进我们的YOLOv8分割模型&#xff08;本文的内容虽然YOLOv8所有的功能的用户都能使用&#xff0c;但是还是建议分割的用户使用&#xff09;&#xff0c;U-Net v2 旨在改进医学图像分割的性能&#xff…

C# 方法(函数)

文章目录 C# 方法&#xff08;函数&#xff09;简单示例程序代码运行效果 值传递和引用传递示例程序 运行效果按输出传递参数运行结果 C# 方法&#xff08;函数&#xff09; 简单示例 程序代码 访问的限制符 using System; using System.Collections.Generic; using Syste…

GO-初识包管理

初识包管理&#xff0c;知道项目中文件和文件夹之间的关系 输出&#xff0c;代码&#xff0c;在go编译器运行时会显示在屏幕中 初识数据类型 整型&#xff0c;数字。例如&#xff1a;1、2、3、4 字符串类型&#xff0c;表示文本信息的。例如:“张三”“李四” 布尔类型&#x…

Day51-Nginx多实例知识与大厂企业级实战

Day51-Nginx多实例知识与大厂企业级实战 1. 什么是nginx多实例&#xff1f;2. 为什么要用多实例&#xff1f;3. 大厂数百个业务项目&#xff0c;如何来管理&#xff1f;4. 大厂上百项目web分用户解决方案4.1 编译nginx环境实践&#xff1a;4.2 zuma实例(利用普通用户权限将不同…

Arduino 开发 野火ESP8266模块的串口通信

一、硬件连接 Arduino ESP8266 串口通信是一个常见的任务&#xff0c;允许通过串行接口与其他设备或计算机进行通信。 连接硬件&#xff1a;将野火ESP8266模块通过USB连接到电脑。注意电源为3.3V。 选择开发板和端口&#xff0c;在Arduino IDE中&#xff0c;选择ESP8266开发板…

图神经网络实战(5)——常用图数据集

图神经网络实战&#xff08;5&#xff09;——常用图数据集 0. 前言0. 图数据集介绍2. Cora 数据集3. Facebook Page-Page 数据集小结系列链接 0. 前言 图数据集往往比单纯的连接集合更丰富&#xff0c;节点和边也可以具有表示分数、颜色、单词等的特征。在输入数据中包含这些…

NLP---Bert分词

目录&#xff1a; Q&#xff1a;bert分词步骤1&#xff1a;构建N * N 的相关性矩阵&#xff0c;计算相邻两个字的相关性&#xff0c;低的话&#xff08;<阈值&#xff09;就切割。2&#xff1a;将A词进行mask计算出A的embedding&#xff0c;然后将AB两个词一起mask&#xff…

【滑动窗口】长度最小的子数组|无重复字符的最长子串|最大连续1的个数 III|将 x 减到 0 的最小操作数

1. 长度最小的子数组 - 力扣&#xff08;LeetCode&#xff09; 1.题目解析&#xff1a; 2.算法原理 &#xff08;1&#xff09;方法一&#xff1a;暴力列举出所有的子数组的和 时间复杂度&#xff1a;O&#xff08;n**2&#xff09;&#xff1a;枚举所有子数组O&#xff08;…

使用 Redux 管理 React 应用状态

使用 Redux 管理 React 应用状态 在复杂的 React 应用中&#xff0c;管理组件状态变得越来越复杂&#xff0c;这时候引入 Redux 可以帮助我们更好地管理状态。Redux 是一个可预测状态容器&#xff0c;它可以帮助我们统一管理应用的状态&#xff0c;使得状态变化更加可控。本文…

机器学习基本算法(一)

1.线性回归算法 Linear Regression 线性回归算法&#xff08;Linear Regression&#xff09;是一种预测性的建模技术&#xff0c;它研究的是因变量&#xff08;目标&#xff09;和自变量&#xff08;预测器&#xff09;之间的关系。线性回归假设目标值与特征之间线性相关&…

MacOS Xcode 使用LLDB调试Qt的 QString

环境&#xff1a; MacOS&#xff1a; 14.3Xcode&#xff1a; Version 15.0Qt&#xff1a;Qt 6.5.3 前言 Xcode 中显示 预览 QString 特别不方便, 而Qt官方的 lldb 脚本debugger/lldbbridge.py一直加载失败&#xff0c;其他第三方的脚本都 不兼容当前的 环境。所以自己研究写…

【how2j练习题】JS部分阶段练习

练习一 <!--练习&#xff0c;做一个简单的加法计算器--><html><input type"text" size "2" id "num1" ><input type"text" size "2" id "num2" ><input type"text" siz…

Density Profile Tool 程序(1D):通过 VMD 可计算 LAMMPS 轨迹的数密度分布(二)

​ 给大家推荐一个结构轨迹后处理程序 Density Profile Tool&#xff0c;目前尝试过的轨迹文件只有LAMMPS文件&#xff0c;感兴趣的大家可以试试其他轨迹文件。这个后处理软件可以计算数密度、质量、电荷和电子分布等性质。 感谢论文的原作者&#xff01; VMD 插件&#xff1…