通过率 28% · 提交 1,118 · 通过 310
小慕正在处理一个数组项目,数组名为 nums,最多包含100个元素。他需要从第一个元素出发,恰好走到最后一个元素,并找出最少的步数。 要求如下: 1. 第一步必须从第一个元素开始,且必须满足:1 ≤ 第一步的步长 < len/2(len 是数组长度,需要小慕自己解析)。 2. 从第二步开始,小慕只能按照当前所在位置的数字值走相应的步数,不能多也不能少。如果无法到达最后一个元素,则返回 -1,只输出最少的步数。 3. 小慕只能向数组尾部方向前进,不能往回走。
这类题属于华为 OD 机考真题方向中「100分 / 2024E」方向的高频题型,通常考察对「100分 / 2024E」的建模能力与边界条件处理。掌握本题的解题思路后,可举一反三应对同类真题方向,稳步提升机考通过率。
提示:带虚线的词点一下有通俗解释。
由正整数组成的数组,以空格分隔,数组长度小于100,请自行解析数据数量。
正整数,表示最少的步数,如果不存在输出-1
示例 1
输入示例
7 5 9 4 2 6 8 3 5 4 3 9
输出示例
2
第一步: 第一个可选步长选择2,从第一个成员7开始走2步,到达9; 第二步: 从9开始,经过自身数字9对应的9个成员到最后。
示例 2
输入示例
1 2 3 7 1 5 9 3 2 1
输出示例
-1
时间限制 1000 ms · 内存限制 128 MB
本平台为独立第三方培训机构,与华为技术有限公司无任何关联;课程的服务内容与权益以购买协议为准,学习效果因个人情况而异。「华为 OD」「华为可信」等仅为对岗位与考试方向的客观描述,相关商标归各自权利人所有。
乍一看本题很像 经典题型、跳跃游戏,实际上本题比后者简单很多。 在后者中,每一步的选择都可以选择小于等于当前位置数字的步数,但在本题中只有 第一步的选择是可变的。
第一步的选择是可变的,其范围为 [1, ceil(n/2))。
题目的描述是 1 <= 第一步的步长 < n/2。
n 为偶数,那么 len/2 是一个整数,步长取值的 右开边界 为 n//2。例如,n = 6,那么 n/2 = 3,我们需要取到 3 的右开边界。
n 为奇数,那么 len/2 是一个非整数,步长取值的 右开边界 为 (n+1)//2。例如,n = 7,那么 n/2 = 3.5,我们需要取到 4 的右开边界。
n//2 和 (n+1)//2 可以用 向上取整 ceil(n/2) 来统一表示。
假设我们确定了第一步的步长为 step,那么第一步走完之后的位置会是 idx = 0 + step = step。
接下来每一步的选择都是固定的,我们需要讨论这些固定的步数选择能否让我们顺利走到终点(数组的最后一个位置,即索引 n-1 的位置),以及所花费的步数是多少。可以构建一个函数 check() 来判断:
将 check() 放在关于 step 的循环中,每次更新全局变量 ans 即可。整体代码如下:
复杂度分析 设 n 为数组 nums 的长度(题目约定数组最多包含 100 个元素)。
登录后可查看你在本题的历史提交,以及每次的各用例通过情况。
© 2026 广州慕课网络科技有限公司 · 吴师兄学算法官网 版权所有