8.23华为OD机试真题 新系统 – 直线冲刺 (JavaPyCC++JsGo)
2026 华为OD机试真题8月23日华为OD上机新系统考试真题 100 分题型
点击查看华为 OD 机试真题完整目录:2026最新华为OD机试新系统卷 + 双机位C卷 真题题库目录|全覆盖题库 + 逐点算法考点详解
题目描述
在一条长度为 n 的直线跑道上,每个格子的坐标从 0 到 n−1,每个格子上写着一个整数,存放在数组 tiles 中。这些数字有特殊含义:
tiles[i]=0,代表这是普通空地,可以通过;tiles[i]=1,代表这是弹簧加速垫;tiles[i]=-1,代表这是陷阱。
你控制的角色从坐标 0 出发,目标是成功到达或越过终点坐标 n−1(即坐标 >= n-1 即算通关)。
角色移动规则:默认情况下,角色每一步只能向右移动 1 格。如果角色踩到弹簧加速垫(1),那么下一步可以向右移动 2 格。如果角色踩到陷阱(-1),游戏结束。
2026 华为OD机试真题8月23日华为OD上机新系统考试真题 100 分题型
点击查看华为 OD 机试真题完整目录:2026最新华为OD机试新系统卷 + 双机位C卷 真题题库目录|全覆盖题库 + 逐点算法考点详解
输入描述
给定一个整数数组 tiles,长度为 n,其中 1 <= n <= 10000。数组中的元素取值为 、1 或 -1。
输入为一行,数组元素使用英文逗号分隔,例如:
0,1,-1,0,0
输出描述
如果角色从坐标 0 出发能够成功通关(到达或越过坐标 n−1),返回通关所需的步数;否则返回 -1。
示例1
输入
0,1,-1,0,0
输出
3
说明
初始在坐标 0,当前格子是 0(普通空地)。
- 第 1 步:移动 1 格,来到坐标 1,当前格子是 1(弹簧垫)。
- 第 2 步:因为踩到弹簧,这步移动 2 格,来到坐标 3(成功越过了坐标 2 的陷阱),当前格子是 0。
- 第 3 步:移动 1 格,来到坐标 4,检查:到达了坐标 4(等于 n−1),成功通关。
示例2
输入
1,0,-1,0
输出
-1
说明
执行过程:初始在坐标 0,当前格子是 1(弹簧垫)。
- 第 1 步:移动 2 格,来到坐标 2,当前格子是 −1(陷阱),游戏结束。
解题思路
核心思想
题目中的移动规则是确定的:当前位置是弹簧就走 2 格,否则走 1 格。不存在分支选择,因此只需要从起点开始按规则模拟。
每次移动前先判断:
- 若当前位置已经到达或越过终点,返回当前步数;
- 若当前位置是陷阱,返回
-1; - 否则按格子类型移动并累加步数。
算法步骤
- 初始化当前位置
pos=0,步数steps=0。 - 若
pos >= n-1,说明已经通关,返回steps。 - 若
tiles[pos] == -1,说明踩到陷阱,返回-1。 - 若
tiles[pos] == 1,向右移动 2 格,否则向右移动 1 格。 - 步数加 1,继续循环。
复杂度分析
- 时间复杂度:
O(n),位置最多向右经过 n 个格子。 - 空间复杂度:`O(
版权声明:
作者:魔改工程师
链接:https://www.sylblog.xin/archives/859
文章版权归作者所有,未经允许请勿转载。
THE END