华为OD机试 - 最小步骤数(Python)

这篇博客介绍了如何解决华为OD机试中的一道题目——找到从数组第一个元素到最后一个元素所需的最小步骤数。解题思路包括将输入字符串转化为数字数组,然后遍历数组的一半寻找可能的步长,模拟行走过程,记录合法路径的最小步数。文章还提供了核心知识点和Python代码实现,并包含代码运行结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最小步骤数

题目

一个正整数数组,设为nums
最大为100个成员
求从第一个成员开始正好走到数组最后一个成员所使用的最小步骤数

要求:

  1. 第一步,必须从第一元素起,且1 <= 第一步步长 < len / 2 (len 为数组长度)
  2. 从第二步开始只能以所在成员的数字走相应的步数,不能多不能少,如果目标不可达返回-1,只输出最小的步骤数量
  3. 只能向数组的尾部走不能向回走

输入

一个正整数数组,元素用空格分割
数组长度 < 100

输出

正整数,最小步数
不存在输出-1

示例一

输入

7 5 9 4 2 6 8 3 5 4 3 9

输出

2

说明

第一个可选步长选择2
从第一个成员7开始走两步到9
第二步从9经过9个成员到最后

示例二

输入

1 2 3 7 1 5 9 3 2 1

输出

-1

解题思路

本题的目标是实现求解一个数组中从第一个元素到最后一个元素最少步骤数的问题。

第一步:通过读入字符串,使用 split 函数将其转换为数字数组 nums。

第二步:通过循环语句遍历从第 1 个元素到第 len // 2 个元素作为第一步可能的走法,每次都记录当前的步数和当前的位置。在循环体中,通过 index += nums[index] 来模拟走的步数,通过 count += 1 来记录步数。

如果 index 超过了 nums 的长度,说明该走法不符合要求,跳出循环;如果刚好到达最后一个元素,更新最小步数并跳出循环。

最后一步:如果 min_count 仍为 0,说明没有可行的走法,输出 -1;否则,输出 min_count。

核心知识点

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梦想橡皮擦

如有帮助,来瓶可乐

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值