在矩阵回溯中进行累加和比较的注意点
1 总结
在回溯时,如果递归函数采用void返回,在入口处使用了sum变量,那么一般在初次调用dfs的地方,这个sum的初始值可能不是0,而是数组的对应指针的值,在比较操作的时候,需要在for循环开始之前进行,这样确保不遗漏corner case
2 题目
2.1 LC1219. 黄金矿工
2.1.1 答案:下面是我的答案,不能通过所有case
比如无法通过case, 正确答案是9,但是执行后的答案是7, [[0,6,1],[0,0,0],[0,9,0]]
从代码中我们可以看到比较值更新msum(msum=Math.max(msum,sum+grid[nx][ny]);)的时机不对,如果有一个非0值的周围都是0值,那么这个值本身没有参与比较,即潜在的最大值可能被忽略
class Solution {int msum=0;public int getMaximumGold(int[][] grid) {int m=grid.length;int n=grid[0].length;int ans=0;boolean vis[][]=new boolean[m][n];for(int i=0;i<m;i++){for(int j=0;j<n;j++){if(grid[i][j]!=0){msum=0;vis[i][j]=true;dfs2(grid,i,j,vis,grid[i][j]);vis[i][j]=false;ans=Math.max(ans,msum);}}}return ans;}int[]dirs=new int[]{-1,0,1,0,-1};void dfs2(int[][] grid, int x, int y,boolean vis[][],int sum){for(int i=0;i<4;i++){int nx=x+dirs[i];int ny=y+dirs[i+1];if(nx>=0&&nx<grid.length&&ny>=0&&ny<grid[0].length){if(grid[nx][ny]==0)continue;if(vis[nx][ny])continue;vis[nx][ny]=true;msum=Math.max(msum,sum+grid[nx][ny]);dfs2(grid,nx,ny,vis,sum+grid[nx][ny]);vis[nx][ny]=false;}}}
}
2.1.2 标准答案:(相比于2.1.1答案,仅仅是移动了一行代码就通过了所有case)
class Solution {int msum=0;public int getMaximumGold(int[][] grid) {int m=grid.length;int n=grid[0].length;int ans=0;boolean vis[][]=new boolean[m][n];for(int i=0;i<m;i++){for(int j=0;j<n;j++){if(grid[i][j]!=0){msum=0;vis[i][j]=true;dfs2(grid,i,j,vis,grid[i][j]);vis[i][j]=false;ans=Math.max(ans,msum);}}}return ans;}int[]dirs=new int[]{-1,0,1,0,-1};void dfs2(int[][] grid, int x, int y,boolean vis[][],int sum){msum=Math.max(msum,sum);// 移动的那行代码for(int i=0;i<4;i++){int nx=x+dirs[i];int ny=y+dirs[i+1];if(nx>=0&&nx<grid.length&&ny>=0&&ny<grid[0].length){if(grid[nx][ny]==0)continue;if(vis[nx][ny])continue;vis[nx][ny]=true;dfs2(grid,nx,ny,vis,sum+grid[nx][ny]);vis[nx][ny]=false;}}}
}
2.1.3 官方标准答案:下面是标准答案,通过所有case
class Solution {int[][] g;boolean[][] vis;int m, n;int[][] dirs = new int[][]{{1,0},{-1,0},{0,1},{0,-1}};public int getMaximumGold(int[][] grid) {g = grid;m = g.length; n = g[0].length;vis = new boolean[m][n];int ans = 0;for (int i = 0; i < m; i++) {for (int j = 0; j < n; j++) {if (g[i][j] != 0) {vis[i][j] = true;ans = Math.max(ans, dfs(i, j));vis[i][j] = false;}}}return ans;}int dfs(int x, int y) {int ans = g[x][y];for (int[] d : dirs) {int nx = x + d[0], ny = y + d[1];if (nx < 0 || nx >= m || ny < 0 || ny >= n) continue;if (g[nx][ny] == 0) continue;if (vis[nx][ny]) continue;vis[nx][ny] = true;ans = Math.max(ans, g[x][y] + dfs(nx, ny));vis[nx][ny] = false;}return ans;}
}作者:宫水三叶
链接:https://leetcode.cn/problems/path-with-maximum-gold/solutions/1245984/gong-shui-san-xie-hui-su-suan-fa-yun-yon-scxo/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
2.1.4 总结:
相关文章:
在矩阵回溯中进行累加和比较的注意点
1 总结 在回溯时,如果递归函数采用void返回,在入口处使用了sum变量,那么一般在初次调用dfs的地方,这个sum的初始值可能不是0,而是数组的对应指针的值,在比较操作的时候,需要在for循环开始之前进行…...
AI语音机器人的发展
第一代AI语音机器人具体投入研发的开始时间不太清楚,只记得2017年的下半年就已经开始接触到成型的AI语音机器人,并且正式商用。语音识别效果还不多,大多都是接入的科大讯飞或者百度的ASR。 2018年算是AI语音机器人的“青春期”吧,…...
SQL语句错误this is incompatible with sql_mode=only_full_group_by解决方法
一、原理层面 这个错误发生在mysql 5.7.5 版本及以上版本会出现的问题: mysql 5.7.5版本以上默认的sql配置是:sql_mode“ONLY_FULL_GROUP_BY”,这个配置严格执行了"SQL92标准"。 很多从5.6升级到5.7时,为了语法兼容,大部…...
静态长效代理IP和动态短效代理IP有哪些用途?分别适用场景是什么?
静态长效代理IP和动态短效代理IP是两种常见的代理IP类型,它们在用途和适用场景上存在一定的差异。了解它们的特性以及使用场景有助于我们更好地利用代理IP,提高网络访问的效率和安全性。 一、静态长效代理IP 1. 用途 静态长效代理IP是指长期保持稳定的代…...
基于Spring Boot+Vue的课堂管理系统(前后端分离)
该项目完全免费 介绍 基于Spring BootVue的课堂管理系统。前后端分离。包含教师授课管理、学生选退课、聊天室、签到、笔记管理模块等。 技术架构 SpringBoot MyBatis Redis WebSocket VueCLI Axios Element UI 项目特点: 1、后台使用MyBatis连接数据库&…...
供排水管网管理信息化的必要性
供排水管网是城市供水系统的大动脉,它负担者将优质水源输送到最终用户的重要职责,对供水系统有着极其重要的作用。城市供排水管网埋设在地下,规模庞大,仅靠人工难以管理。同时,由于城市的发展,管网连接结构…...
统一格式,无限创意:高效管理不同格式图片批量转换
在数字时代,图片格式的多样性带来了管理上的不便。为了满足不同的需求,我们经常需要将大量图片转换为统一的格式。那么,有没有一种简单、高效的方法来解决这个问题呢?答案是肯定的!今天,我们将为您介绍一款…...
工作电压范围宽的国产音频限幅器D2761用于蓝牙音箱,输出噪声最大仅-90dBV
近年来随着相关技术的不断提升,音箱也逐渐从传统的音箱向智能音箱、无线音箱升级。同时在消费升级的背景下,智能音箱成为人们提升生活品质的方式之一。智能音箱是智能化和语音交互技术的产物,具有点歌、购物、控制智能家居设备等功能…...
中国智造闪耀CES | 木牛科技在美国CES展亮相多领域毫米波雷达尖端方案
素有全球科技潮流“风向标”之称的2024国际消费类电子产品展(CES),于1月9-12日在美国拉斯维加斯会议中心举办。CES是全球最大的消费电子和消费技术展览会之一,汇集了世界各地优秀的消费电子和科技公司,带着最好的产品来…...
亚马逊衣物收纳 梳妆台 收纳柜CPC认证ASTM F2057-23 报告分析
衣物收纳商品是指带有抽屉或铰链门的家具商品,通常是卧室家具,用于存放衣物。该政策适用于独立式服装收纳商品 包括但不限于箱子、五斗橱、抽屉柜、大橱柜、衣橱柜、衣橱、门柜和梳妆台,并且满足以下要求: 衣物收纳商品是指带有抽…...
【设计模式】02-SOLID 设计原则
面向对象编程(OOP)是一种广泛应用的编程范式,它鼓励开发者通过对象来模拟现实世界。为了提高面向对象设计(OOD)的质量和可维护性,Robert C. Martin提出了 SOLID 原则,这五个原则构成了编写良好、…...
突然间我懂了软件
什么是 “遗留代码” – 它是一个不再由具有这些代码相关理论的人维护的代码库。 单枪匹马的工程师能做出比同样有能力的专业团队更好的产品。单干的工程师会花时间为自己的程序建立一套完整的理论,而专业人员则会定期在不同的项目之间流动,他们只对自己…...
游戏美术的技与艺
大家好,我是阿赵。 可能很多朋友都知道,我刚进入游戏行业的时候,做的是美术工作,包括了建模、贴图、动画等,都做过。我对各种美术资源制作也都很熟悉,懂得很多制作的技术。但最后,我却没有继…...
Python(35):Python3 通过https上传文件和下载文件
Python(35):Python3 通过https上传文件和下载文件 Python http方式的下载,参考:https://blog.csdn.net/fen_fen/article/details/113753983 https需要先安装需要的模块 1、上传示例 1.1、调用: upload_strategy(access_token,"1234…...
【MySQL】日期格式为 YYYY-MM 无法直接使用 DATE_SUB 函数的解决方案(特殊处理 或 PERIOD_DIFF 函数)
力扣题 1、题目地址 1843. 可疑银行账户 2、模拟表 表:Accounts Column NameTypeaccount_idintmax_incomeint account_id 是这张表具有唯一值的列。每行包含一个银行账户每月最大收入的信息。 表:Transactions Column NameTypetransaction_idint…...
Redis的key淘汰方式和内存不足淘汰方式
Redis的key过期淘汰方式 Redis key过期策略 定期删除惰性删除 Redis如何淘汰过期的key 定期删除 隔一段时间,就随机抽取一些设置了过期时间的key,检查其是否过期,如果过期就删除定期删除可能会导致很多过期key到了时间并没有被删除掉&#x…...
java使用redis
1、pom.xml文件里面增加如下依赖: <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId> </dependency> 2、yml文件增加如下配置: redis:host: loc…...
MySQL技能树
MySQL作为一款广泛使用的关系型数据库管理系统,提供了丰富多样的SQL语句以支持数据的创建、查询、更新和删除等操作。以下是一份MySQL语句操作大全的概览,涵盖从数据库管理到复杂查询的常用命令: ### 一、数据库管理(DDL - 数据定…...
redis获取过期时间
03,redisTemplate_redistemplate 获取剩余时间-CSDN博客 11.返回当前key所对应的剩余过期时间 redisTemplate.getExpire(key);1 12.返回剩余过期时间并且指定时间单位 redisTemplate.getExpire(key, unit);...
ERROR in Plugin “react“ was conflicted .... 天坑留念-turborepo、eslint plugin
前两天项目代码拉下来,装完依赖启动的时候直接报错: [eslint] Plugin "react" was conflicted between ".eslintrc.js eslint-config-custom eslint-config-alloy/react" and "BaseConfig D:\pan\erp\test\business-servic…...
龙虎榜——20250610
上证指数放量收阴线,个股多数下跌,盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型,指数短线有调整的需求,大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的:御银股份、雄帝科技 驱动…...
基于FPGA的PID算法学习———实现PID比例控制算法
基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容:参考网站: PID算法控制 PID即:Proportional(比例)、Integral(积分&…...
基于ASP.NET+ SQL Server实现(Web)医院信息管理系统
医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上,开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识,在 vs 2017 平台上,进行 ASP.NET 应用程序和简易网站的开发;初步熟悉开发一…...
【大模型RAG】Docker 一键部署 Milvus 完整攻略
本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装;只需暴露 19530(gRPC)与 9091(HTTP/WebUI)两个端口,即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...
【论文笔记】若干矿井粉尘检测算法概述
总的来说,传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度,通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...
WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)
一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解,适合用作学习或写简历项目背景说明。 🧠 一、概念简介:Solidity 合约开发 Solidity 是一种专门为 以太坊(Ethereum)平台编写智能合约的高级编…...
今日科技热点速览
🔥 今日科技热点速览 🎮 任天堂Switch 2 正式发售 任天堂新一代游戏主机 Switch 2 今日正式上线发售,主打更强图形性能与沉浸式体验,支持多模态交互,受到全球玩家热捧 。 🤖 人工智能持续突破 DeepSeek-R1&…...
MySQL中【正则表达式】用法
MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现(两者等价),用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例: 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...
【JavaSE】绘图与事件入门学习笔记
-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角,以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向,距离坐标原点x个像素;第二个是y坐标,表示当前位置为垂直方向,距离坐标原点y个像素。 坐标体系-像素 …...
python执行测试用例,allure报乱码且未成功生成报告
allure执行测试用例时显示乱码:‘allure’ �����ڲ����ⲿ���Ҳ���ǿ�&am…...
