目录
- 2023 5月 B卷 “新加题”(100分值)
- 2023Q1 100分
- 下面分享一道“2023Q1 200分 机器人活动区域”的解题思路
- 一、题目描述
- 二、输入描述
- 三、输出描述
- 四、解题思路
- 五、Python算法源码
- 六、效果展示
- 1、输入
- 2、输出
大家好,我是哪吒。
五月份之前,如果你参加华为OD机试,收到的应该是2022Q4或2023Q1,这两个都是A卷题。
5月10日之后,很多小伙伴收到的是B卷,那么恭喜你看到本文了,抓紧刷题吧。B卷新题库正在更新中。
华为机试有三道题,第一道和第二道属于简单题,分值为100分,第三道为困难题,分值为200分,总分400分,150分钟考试时间。
华为的考试平台是牛客网,大家可以提前去牛客网找到华为机考门槛进行练习,主要是熟悉平台操作练习一下怎么处理输入输出哈!后面我也分享了很多牛客网上的华为OD试题。
华为机考的分数是按照测试用例通过的比例来确定的,比如第一题满分100,如果你提交代码后显示测试用例通过率为80%,那么这道题你就只能得80分,所以其实成绩你在考试的时候就心知肚明了!
150分是华为统一的通过分数线。但各部门的要求又不一样,通常非目标院校的分数要求更高些。300+是高分,260+是较为安全的分数。总之分数越高越高,对后续的定级、综面、HR审批都有益处。
一般来说对接你的HR会问你啥时候可以笔试,你觉得准备的ok了就会发你一个机考链接,这个机考链接的有效期为7天,你在这七天时间内找个时间参加考试即可!华为OD机考会影响薪资的,300分以上和300分一下的价格是不一样的,所以我建议大家好好准备争取超过300分,能拿高分就拿高分。
机试没考过的话,会有半年的冷冻期。
为什么我说华为机考并不难,原因很简单,因为这个考试是有题库的!你在进入机考页面的时候网页上会显示正在组卷中,其实就是去题库里找两个简单题一道复杂题。既然这是一场有题库的考试,那我们最重要的当然是获取最全面的题库对吧,这个大家放心我已经帮大家整理好了,未来也会持续更新!
我觉得准备机考前的第一件事是选择一门合适的编程语言,华为机考对编程语言是没有限定的,你可以选择自己最喜欢的编程语言。考虑到大部分华为OD的应聘者都是技术基础较为薄弱甚至非科班的同学,我还是满建议大家使用Java来应付机考还有后面的手撕代码的,当然如果你会JS、Python、C++的话也可以用来考试。
如果基于我提供的题库开始认认真真刷题,不开玩笑的说遇到原题是肯定的,正常情况下遇到两道原题是不难的,很多同学是直接三题全部命中!因为华为题库三个月会更新一部分新题进来,所以大家尽量不要在新题刚刚更新的时候去做,建议在新题发布一个月后再考我感觉命中两道很正常的!
下面,哪吒将华为OD机试真题归归类,让大家一目而了然。
关于订阅华为OD机试真题的后续问题
- 订阅专栏后,专栏内的文章都可看,以后还会继续更新新题;
- 每道题都包含题目、解题思路、代码详解(关键行包含详细注释)、代码运行截图(保证代码100%正确,通过率100%);
- 已经订阅的小伙伴,推荐新人订阅可享 8 折优惠,私信我即可;
在考试的时候,最好不要用CSDN专栏里的源码去答题,因为华为OD机试是有查重的,这个一定要注意!最好是改一改变量名称,加一加注释,改一改逻辑顺序,掌握答题思路才是关键,下面的题中我都加了详细的答题思路,代码中也有详细的注释说明,代码运行是100%正确无误的,每一题都有样例测试,全网独一份。
如果你刚刚参加完机试考试,欢迎提供真题到哪吒这里,直接红包转账收题。
很多考过的小伙伴,总结了宝贵的经验,多刷题,先易后难,前期积累自信,后期逐一突破,效果最佳。
下面从最新题开始分享、按时间倒序、按难以程度正序排序,做到刷题的循序渐进。
2023 5月 B卷 “新加题”(100分值)
1、华为OD机试真题 Java 实现【跳房子II】【2023 B卷 100分】,附详细解题思路
2、华为OD机试真题 Java 实现【支持优先级的队列】【2023 B卷 100分】
3、华为OD机试真题 Java 实现【IPv4地址转换成整数】【2023 B卷 100分】
4、华为OD机试真题 Java 实现【字符统计】【2023 B卷 100分】
5、华为OD机试真题 Java 实现【食堂供餐】【2023 B卷 考生抽中题】,附详细解题思路
6、华为OD机试真题(Java),跳跃游戏 II(100%通过+复盘思路)
7、华为OD机试真题 Java 实现【拼接URL】【2023 B卷 100分】,附详细解题思路
8、华为OD机试真题 Java 实现【找终点】【2023 B卷 100分】,附详细解题思路
9、华为OD机试真题 Java 实现【猴子爬山】【2023 B卷 100分】,附详细解题思路
10、华为OD机试真题 Java 实现【矩阵最大值】【2023 B卷 100分】,附详细解题思路
🏆更多华为OD真题,查看华为OD机试(JAVA)真题(A卷+B卷)
2023Q1 100分
1.、华为OD机试真题 Python 实现【简单的自动曝光】【2023Q1 100分】,附详细解题思路
2、华为OD机试真题 Python 实现【获取最大软件版本号】【2023Q1 100分】,附详细解题思路
3、华为OD机试真题 Python 实现【货币单位换算】【2023Q1 100分】,附详细解题思路
4、华为OD机试真题 Python 实现【核酸检测人员安排】【2023Q1 100分】,附详细解题思路
5、华为OD机试真题 Python 实现【机器人活动区域】【2023Q1 200分】
6、华为OD机试真题 Python 实现【投篮大赛】【2023Q1 100分】
7、华为OD机试真题 Python 实现【开心消消乐】【2023 B卷 100分】,附详细解题思路
8、华为OD机试真题 Python 实现【静态代码扫描服务】【2023Q1 100分】
9、华为OD机试真题B卷 Python 实现【箱子之形摆放】,附详细解题思路
10、华为OD机试真题 Python 实现【机房布局】【2023Q1 200分】,附详细解题思路
🏆更多华为OD真题,查看华为OD机试(Python)真题(A卷+B卷)
下面分享一道“2023Q1 200分 机器人活动区域”的解题思路
一、题目描述
现有一个机器人,可放置于 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个数字,表示最大活动区域对应的网格点数目
行末无多余空格
四、解题思路
- 读取输入的网格行数 M 和列数 N;
- 创建一个二维数组 region,用于表示网格;
- 读取输入的网格数值,并将其存储到 region 数组中;
- 初始化最大活动区域对应的网格点数目 max 为 0;
- 遍历网格中的每个网格点,以每个网格点为起点进行深度优先搜索;
- 在深度优先搜索过程中,判断当前网格点的数值是否有效:
- 如果当前网格点的数值为 -1,表示该网格点已经访问过,直接返回 0;
- 如果当前网格点的数值与起点网格点的数值的差的绝对值大于 1,表示不满足相邻网格差值的要求,直接返回 0;
- 将当前网格点的数值设为 -1,表示已经访问过该网格点;
- 递归调用深度优先搜索函数,分别向上、下、左、右四个方向移动,并将每次递归返回的结果累加到 count 变量中;
- 返回最终的 count 值;
- 更新最大活动区域对应的网格点数目 max,取当前网格点的 count 值与 max 的较大值;
- 输出最大活动区域对应的网格点数目 max;
五、Python算法源码
def calculate_max_region(m, n, grid):
# 创建一个二维数组 region 来表示网格
region = []
for i in range(m):
# 将输入的网格数值复制到 region 数组中
region.append(list(grid[i]))
# 初始化最大活动区域对应的网格点数目为 0
max_count = 0
# 遍历网格中的每个网格点,以每个网格点为起点进行深度优先搜索
for i in range(m):
for j in range(n):
if region[i][j] != -1:
# 调用 move 函数进行深度优先搜索,并更新最大活动区域对应的网格点数目
max_count = max(max_count, move(i, j, region[i][j], region))
# 返回最大活动区域对应的网格点数目
return max_count
def move(row, col, num, region):
# 判断当前网格点的坐标是否越界
if row < 0 or col < 0 or row >= len(region) or col >= len(region[0]):
return 0
# 获取当前网格点的数值
current_num = region[row][col]
# 判断当前网格点的数值是否有效
if current_num == -1 or abs(current_num - num) > 1:
return 0
# 将当前网格点的数值设为 -1,表示已经访问过该网格点
region[row][col] = -1
# 初始化网格点数目为 1,表示当前网格点是活动区域的一部分
count = 1
# 分别向上、下、左、右四个方向移动,并将每次递归返回的结果累加到 count 变量中
count += move(row - 1, col, current_num, region) # 上移
count += move(row + 1, col, current_num, region) # 下移
count += move(row, col - 1, current_num, region) # 左移
count += move(row, col + 1, current_num, region) # 右移
# 返回最终的 count 值
return count
六、效果展示
1、输入
2 3
1 3 5
4 1 3
2、输出
1
🏆本文收录于,华为OD机试(JAVA)真题(A卷+B卷)
🏆本文收录于,华为OD机试(Python)真题(A卷+B卷)
🏆本文收录于,华为OD机试(JavaScript)真题(A卷+B卷)
每一题都有详细的答题思路、详细的代码注释、样例测试,订阅后,专栏内的文章都可看,可加入华为OD刷题群(私信即可),发现新题目,随时更新,全天CSDN在线答疑。