【华为2018年校园招聘】软件开发---跳跃比赛

博客介绍了华为2018年校园招聘中的一道软件开发题目,即如何以最少跳跃次数从一组正整数的起点跳到终点。解题思路涉及递归算法,通过寻找每次能一步到达终点的最远位置来优化步数。作者提供了问题的分析和递归解决方案,并附上了源码。
摘要由CSDN通过智能技术生成

题目描述
给出一组正整数,你从第一个数向最后一个数方向跳跃,每次至少跳跃1格,每个数的值表示你从这个位置可以跳跃的最大长度。计算如何以最少的跳跃次数跳到最后一个数。

输入描述:
第一行表示有多少个数n
第二行开始依次是1到n个数,一个数一行

输出描述:
输出一行,表示最少跳跃的次数。

示例1
输入
7
2
3
2
1
2
1
5
输出
3

说明
7表示接下来要输入7个正整数,从2开始。数字本身代表可以跳跃的最大步长,此时有2种跳法,为2-2-2-5和2-3-2-5都为3步

解题思路:如何选择步长是关键。
我的解题思路过程如下:
(1)把最后一个数当作终点,从最后一个数开始,往前找,找到一个可以一步到达终点且距离终点最远的那个数;
(2)把刚刚找到的数,作为终点,重复(1)的步骤
(3)到达起点的数时,就终止。

怎么理解“可以一步到达终点且距离终点最远”呢?
这里写图片描述
如上图,肯定选择2,而不是1.

实际上就是保证每一步跨越尽可能大的距离,那么需要走的步数肯定就是最小的。

思路是对的,但是在代码实现的时候出现问题了,如何保证你找到的那个位置的数就是

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值