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

华为OD机试真题 JavaScript 实现【机器人活动区域】【2023Q1 200分】,附详细解题思路

在这里插入图片描述

目录

    • 一、题目描述
    • 二、输入描述
    • 三、输出描述
    • 四、解题思路
    • 五、JavaScript算法源码
    • 六、效果展示
      • 1、输入
      • 2、输出

华为OD机试 2023B卷题库疯狂收录中,刷题点这里

刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。

一、题目描述

现有一个机器人,可放置于 M × N的网格中任意位置,每个网格包含一个非负整数编号。当相邻网格的数字编号差值的绝对值小于等于 1 时,机器人可在网格间移动

问题:求机器人可活动的最大范围对应的网格点数目。

说明:

1)网格左上角坐标为 (0, 0),右下角坐标为 (m-1, n-1)

2)机器人只能在相邻网格间上、下、左、右移动

示例1,输入如下网格

输出:6

说明:图中绿色区域,相邻网格差值绝对值都小于等于1,且为最大区域,对应网格点数目为6

示例 2,输入如下网格:

输出:1

二、输入描述

第1行输入为M和N,M表示网格的行数,N表示网格的列数。

之后M行表示网格数值,每行N个数值(数值大小用k表示),数值间用单个空格分隔,行首行尾无多余空格。

M、N、k均为整数,且1<=M,N<=150,0<=k<=50。

三、输出描述

输出1行,包含1个数字,表示最大活动区域对应的网格点数目

行末无多余空格

四、解题思路

  1. 读取输入的网格行数 M 和列数 N;
  2. 创建一个二维数组 region,用于表示网格;
  3. 读取输入的网格数值,并将其存储到 region 数组中;
  4. 初始化最大活动区域对应的网格点数目 max 为 0;
  5. 遍历网格中的每个网格点,以每个网格点为起点进行深度优先搜索;
  6. 在深度优先搜索过程中,判断当前网格点的数值是否有效:
    • 如果当前网格点的数值为 -1,表示该网格点已经访问过,直接返回 0;
    • 如果当前网格点的数值与起点网格点的数值的差的绝对值大于 1,表示不满足相邻网格差值的要求,直接返回 0;
  7. 将当前网格点的数值设为 -1,表示已经访问过该网格点;
  8. 递归调用深度优先搜索函数,分别向上、下、左、右四个方向移动,并将每次递归返回的结果累加到 count 变量中;
  9. 返回最终的 count 值;
  10. 更新最大活动区域对应的网格点数目 max,取当前网格点的 count 值与 max 的较大值;
  11. 输出最大活动区域对应的网格点数目 max;

五、JavaScript算法源码

let region;
let M;
let N;function calculateMaxRegion(m, n, grid) {M = m;N = n;region = [];for (let i = 0; i < M; i++) {region[i] = [];for (let j = 0; j < N; j++) {region[i][j] = grid[i][j];}}let max = 0;for (let i = 0; i < M; i++) {for (let j = 0; j < N; j++) {if (region[i][j] !== -1) {max = Math.max(max, move(i, j, region[i][j]));}}}return max;
}function move(row, col, num) {if (row < 0 || col < 0 || row >= M || col >= N) {return 0;}const currentNum = region[row][col];if (currentNum === -1 || Math.abs(currentNum - num) > 1) {return 0;}region[row][col] = -1;let count = 1;count += move(row - 1, col, currentNum);count += move(row + 1, col, currentNum);count += move(row, col - 1, currentNum);count += move(row, col + 1, currentNum);return count;
}

六、效果展示

1、输入

2 3
1 3 5
4 1 3

2、输出

1


🏆下一篇:华为OD机试真题 JavaScript 实现【贪心的商人】【2023Q1 100分】

🏆本文收录于,华为OD机试(JavaScript)真题(A卷+B卷)

刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。

在这里插入图片描述

http://www.lryc.cn/news/105495.html

相关文章:

  • C++中的静态分配和动态分配
  • 【Android常见问题(五)】- Flutter项目性能优化
  • JSON转换:实体类和JSONObject互转,List和JSONArray互转(fastjson版)
  • Java单例模式几种代码详解
  • PHP代码审计--理论
  • 在云服务器上,clone github时报Connection timed outexit code: 128
  • 小型双轮差速底盘寻迹功能的实现
  • 第七篇:k8s集群使用helm3安装Prometheus Operator
  • Chrome 75不支持保存成mhtml的解决方法
  • 工程监测振弦采集仪应用于岩土工程监测案例
  • 配置HDFS单机版,打造数据存储的强大解决方案
  • U盘删除的文件怎么找回?4个简单方法分享!
  • 【雕爷学编程】MicroPython动手做(27)——物联网之掌控板小程序2
  • 形参动态内存开辟和柔性数组
  • 【LLM系列之指令微调】长话短说大模型指令微调的“Prompt”
  • MacOS使用brew如何下载Nginx
  • linux ftp
  • 你知道HTTP与HTTPS有什么区别吗?
  • keil使用printf函数重定串口输出,程序卡在Reset_Handler
  • Redis预热 雪崩 击穿 穿透
  • Shell脚本学习-MySQL单实例和多实例启动脚本
  • vue3搭建(vite+create-vue)
  • 服务器中了360后缀勒索病毒怎么解决,360后缀勒索病毒解密数据恢复
  • 3000字详解:风控核心岗位及核心价值
  • fiddler 手机抓包(含https) 完整流程
  • ChatGPT学python——制作自己的AI模型(一)初步了解
  • 多赛道出海案例,亚马逊云科技为企业提供全新解决方案实现高速增长
  • 异步消息传递技术 JMS AMQP MQTT
  • 利用Python实现汉译英的三种方法
  • 磁盘均衡器:HDFS Disk Balancer