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
  • 否则按格子类型移动并累加步数。

算法步骤

  1. 初始化当前位置 pos=0,步数 steps=0
  2. pos >= n-1,说明已经通关,返回 steps
  3. tiles[pos] == -1,说明踩到陷阱,返回 -1
  4. tiles[pos] == 1,向右移动 2 格,否则向右移动 1 格。
  5. 步数加 1,继续循环。

复杂度分析

  • 时间复杂度:O(n),位置最多向右经过 n 个格子。
  • 空间复杂度:`O(
THE END