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 <= 10^5
  • 1 <= grid[i][j] <= 10^6

解题思路

  • 新建一个二维数组,用于记录每一个位置可以走的最大步数
const rows = grid.length,cols = grid[0].length;const dp = new Array(rows).fill(null).map(() => Array(cols).fill(0));
  • 根据题目描述进行遍历,题目要求的是要从第一列开始,所以我们一个个要先遍历列再遍历行
for (let j = 0; j < cols - 1; j++) {for (let i = 0; i < rows; i++) {...}
}
  • 如果当前遍历的不为第一列且其值为0,则说明不能继续往后走了
if (j > 0 && dp[i][j] == 0) continue;
  • 如果当前遍历的不为第一行,那么可以往右上角进行遍历,判断右上角的值是否比其大即可
if (i > 0 && grid[i - 1][j + 1] > grid[i][j]) {dp[i - 1][j + 1] = Math.max(dp[i][j] + 1, dp[i - 1][j + 1]);res = Math.max(dp[i - 1][j + 1], res);
}
  • 如果当前遍历的不为最后一行,那么可以往右下角进行遍历,判断右下角的值是否比其大即可
if (i < rows - 1 && grid[i + 1][j + 1] > grid[i][j]) {dp[i + 1][j + 1] = Math.max(dp[i][j] + 1, dp[i + 1][j + 1]);res = Math.max(dp[i + 1][j + 1], res);
}
  • 判断右边的值是否比其大
if (grid[i][j + 1] > grid[i][j]) {dp[i][j + 1] = Math.max(dp[i][j] + 1, dp[i][j + 1]);res = Math.max(dp[i][j + 1], res);
}
  • 最后返回获取到的最大步数即可
return res;

AC代码

/*** @param {number[][]} grid* @return {number}*/
var maxMoves = function (grid) {const rows = grid.length,cols = grid[0].length;const dp = new Array(rows).fill(null).map(() => Array(cols).fill(0));let res = 0;for (let j = 0; j < cols - 1; j++) {for (let i = 0; i < rows; i++) {if (j > 0 && dp[i][j] == 0) continue;if (i > 0 && grid[i - 1][j + 1] > grid[i][j]) {dp[i - 1][j + 1] = Math.max(dp[i][j] + 1, dp[i - 1][j + 1]);res = Math.max(dp[i - 1][j + 1], res);}if (grid[i][j + 1] > grid[i][j]) {dp[i][j + 1] = Math.max(dp[i][j] + 1, dp[i][j + 1]);res = Math.max(dp[i][j + 1], res);}if (i < rows - 1 && grid[i + 1][j + 1] > grid[i][j]) {dp[i + 1][j + 1] = Math.max(dp[i][j] + 1, dp[i + 1][j + 1]);res = Math.max(dp[i + 1][j + 1], res);}}}return res;
};

公众号

关注公众号『前端也能这么有趣』,获取更多有趣内容。

说在后面

🎉 这里是 JYeontu,现在是一名前端工程师,有空会刷刷算法题,平时喜欢打羽毛球 🏸 ,平时也喜欢写些东西,既为自己记录 📋,也希望可以对大家有那么一丢丢的帮助,写的不好望多多谅解 🙇,写错的地方望指出,定会认真改进 😊,偶尔也会在自己的公众号『前端也能这么有趣』发一些比较有趣的文章,有兴趣的也可以关注下。在此谢谢大家的支持,我们下文再见 🙌。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

this指向是在那个全局变量?

在浏览器环境中&#xff0c;如果没有特殊处理&#xff0c;全局对象是 window 对象。因此&#xff0c;在浏览器环境中&#xff0c;this 的指向在全局作用域中将是 window 对象。在 Node.js 环境中&#xff0c;全局对象是 global 对象。 举例来说&#xff0c;在浏览器环境下&…

月度工作计划

以下是一份可能的月度工作计划&#xff0c;包含了您提供的关键词&#xff1a; 第一周&#xff1a;需求分析和项目规划 需求分析 确定爬虫的目标网站和所需数据。分析所需解析的民航相关知识网站的内容结构。 项目规划 制定项目时间表和里程碑。分配资源和任务。 第二周&…

How to upgrade NBU cluster from 10.0.0.1 to 10.2.0.1

1. Environment Statement OS: SuSE 12 SP4 InfoScale: 7.4.2 NBU: 10.0.0.1 2. Download EEB patch and utf8 tools 2.1 Donwload utf8 check tools from Veritas. utf8 character check before NBU upgrade, upgrade will be failed if “NBDB” is using utf8 characte…

C# EPPlus导出dataset----Excel3样式

目录 一、单元格计算 二、隐藏操作 三、全局样式 四、指定范围样式

Python实战:Flask轻量级web框架入门

Flask是一个轻量级的Web框架&#xff0c;它是由Armin Ronacher开发的&#xff0c;使用Python语言编写。Flask易于上手&#xff0c;具有高度的可扩展性&#xff0c;非常适合快速开发Web应用程序。 一.Flask简介 Flask是一个基于Werkzeug WSGI工具箱和Jinja2模板引擎的Web框架。…

thinkphp 微信商户转账到微信小程序用户零钱(v3密钥版)

这几天做项目有一个需求,小程序用户提交记录后,商家后台审核通过自动转账到用户的微信零钱中. 今天分享下如何实现自动打款, 一种是用v2密钥的接口:企业付款到零钱 一种是用v3密钥的接口:微信商户转账到零钱(听说是v2接口的微信商户容易被限制,后来就改成v3了) php后端代码 v3…

Linux中判断某个Docker容器服务的内存是否超过临界值,比如到达10G,则在凌晨4点执行定时任务执行重新构建命令

监测NAME是blade-jiangxinzhougarden的服务&#xff0c;如果内存&#xff08;MEM USAGE&#xff09;超过10G则在凌晨4点执行重新构建命令 1.编写脚本文件restart_jxz.sh #!/bin/bash# 设置要监控的容器名称或服务名称(替换成你的服务名) SERVICE_NAME"blade-jiangxinzhou…

正信晟锦:老板拖工资怎么说比较合适

在职场中&#xff0c;老板拖欠工资是一个敏感而棘手的问题。面对这一情况&#xff0c;员工应保持冷静与专业&#xff0c;采取合适的方式表达自己的合理关切&#xff0c;并寻求问题的解决。 私下与老板进行沟通。选择一个适当的时机&#xff0c;以尊重和理解的态度开场&#xff…

Leetcode 3084. Count Substrings Starting and Ending with Given Character

Leetcode 3084. Count Substrings Starting and Ending with Given Character 1. 解题思路2. 代码实现 题目链接&#xff1a;3084. Count Substrings Starting and Ending with Given Character 1. 解题思路 这一题其实挺简单的&#xff0c;只要看一下目标的character在stri…

数据库系统概论 第五版(王珊) 数据库课程实验

数据库系统概论 第五版(王珊) 数据库课程实验 定义基本表 8个基本表建表sql如下&#xff1a; CREATE TABLE Region(/*地区表*/regionkey INTEGER PRIMARY KEY ,name CHAR(25),COMMENT VARCHAR(152) );CREATE TABLE Nation (/*国家表*/nationkey integer PRIMARY KEY ,name c…

每日一题——LeetCode1694.重新格式化电话号码

方法一 模拟&#xff1a; 首先去除number里面的破折号和空格&#xff0c;取出纯数字组成的字符串str。 对于str每三个数分成一组&#xff0c;加一个破折号&#xff0c;当str的长度小于等于4时再分情况讨论&#xff0c;如果等于4就分为22形式&#xff0c;如果小于4&#xff0c…

Springboot 整合Mybatis 实现增删改查(二)

续上篇&#xff1a;Springboot整合Mybatis的详细案例图解分析-CSDN博客 mapper层&#xff08;StudentMapper&#xff09; //通过id查询student方法Student searchStudentById(int id);//通过id删除student方法int deleteStudentById(int id);//通过id增加student方法int inser…

基于springboot+vue的乡政府管理系统

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…

Fay数字人<助理版>具体编译步骤,手把手带你避坑 | 多图预警 ( python 3.11 编译环境 超详细教程 )

Fay数字人<助理版>具体编译步骤 系列教程环境描述一、搭建编译环境1、下载anaconda2、下载Fay(带货版)源码 二、Fay编译参数配置&#xff08;手把手教学&#xff09;(一)Fay具体编译步骤(二)配置 aliyun key(三)配置 aliyun 智能语音交互app(四)修改并配置自己的FAY数字…

解决后端传给前端的日期问题

解决方式&#xff1a; 1). 方式一 在属性上加上注解&#xff0c;对日期进行格式化 但这种方式&#xff0c;需要在每个时间属性上都要加上该注解&#xff0c;使用较麻烦&#xff0c;不能全局处理。 2). 方式二&#xff08;推荐 ) 在WebMvcConfiguration中扩展SpringMVC的消息转…

canal问题记录:something goes wrong when doing authentication: auth failed for user:

一、问题描述 部署了1.15服务端 canal.deployer-1.1.5 用于监听mysql的binlog日志&#xff0c;同时在项目中集成了canal client,用于在监听到指定数据表变化时自定义写入es。 服务端配置&#xff1a; 客户端配置&#xff1a; public void run() {// 创建链接CanalConnector …

全流程ArcGIS Pro技术应用

GIS是利用电子计算机及其外部设备&#xff0c;采集、存储、分析和描述整个或部分地球表面与空间信息系统。简单地讲&#xff0c;它是在一定的地域内&#xff0c;将地理空间信息和 一些与该地域地理信息相关的属性信息结合起来&#xff0c;达到对地理和属性信息的综合管理。GIS的…

Trustzone和Tee的基本概念区分

Trustzone和Tee的基本概念区分 TrustZone:可信 区域,TrustZone是ARM处理器提供的一种特性或安全方案,而TEE是一个更广泛的概念,包含了TrustZone以及其他可以实现类似功能的解决方案。 ARM公司于2006年提出了一种硬件虚拟化技术TrustZone及其相关硬件实现方案。TrustZone即…

P3392 涂国旗 python解法

P3392 涂国旗 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) n,mmap(int,input().split()) arr[] ks[] ans100000000 #因为要比较最小值&#xff0c;这里由于数据较小可以设置这么大&#xff0c;数据要再大的话就设置最大常量 #前i行涂蓝成本b[i],涂红成本r[i],涂白成本w[i],…

代码随想录阅读笔记-哈希表【四数之和】

题目 给定一个包含 n 个整数的数组 nums 和一个目标值 target&#xff0c;判断 nums 中是否存在四个元素 a&#xff0c;b&#xff0c;c 和 d &#xff0c;使得 a b c d 的值与 target 相等&#xff1f;找出所有满足条件且不重复的四元组。 注意&#xff1a;答案中不可以包…