跳跃的数字

来源:互联网 发布:威锋网 mac office 编辑:程序博客网 时间:2024/04/29 10:40

给定一个非负整数数组,假定你的初始位置为数组第一个下标。

数组中的每个元素代表你在那个位置能够跳跃的最大长度。

请确认你是否能够跳跃到数组的最后一个下标。

例如:A = [2,3,1,1,4]A=[2,3,1,1,4] 能够跳跃到最后一个下标,输出true

A = [3,2,1,0,4]A=[3,2,1,0,4] 不能跳跃到最后一个下标,输出false

输入格式

第一行输入一个正整数 n(1 \leq n \leq 500)n(1n500),接下来的一行 nn 个整数,输入数组 A_iAi

输出格式

如果能跳到最后一个下标,输出true,否则输出false

样例输入

52 0 2 0 1

样例输出

true

这道题目需要用到递归和贪心算法的思想,每次从当前数组的位置往后跳跃的时候,取最大能够跳的位置,然后每次以同样的方法跳跃,这是一个递归的过程,当跳出了数组的长度时,此时递归结束,返回true,否则,以最大跳跃递减进行跳跃,当所有可能的跳跃都执行结束,还没有到达数组的最后一个位置,那么返回false。注意这里有一个需要注意的地方,如果递归最底层的函数没有达到数组最后一个位置,那么当前位置的最大跳跃长度应置为-1,这样会提高很多的性能。如果没有加上这个语句,会使程序超时。

原创粉丝点击