给出一个长度为 n的数组 a,数组中的值a[i]表示你在第i 个位置最多能够移动到第i+a[i]个位置,并且不能超过n。你可以选择移动到的位置包括:i,i+1,...i+a[i]。你需要确定移动到第n个位置的最小移动次数。如果无法移动到第n个位置请输出 -1。输入数组的长度 n(1<=n<=100000),和含有 n 个数字的数组 a,a[i] 表示第i个位置最多能够移动到第i+a[i]个位置(0<=a[i] <=100)。输出一个数字,表示最小的移动次数。
这是一个动态规划的问题。设f(i)为到第i个位置处的最小步数。初始化f的每个位置步数都是一个足够大的值。Nums(i) 表示第 i 个位置最多能够移动的距离。对于一个位置 j 来说,它的最小步数应该是前面所有可以一步到达它这里的位置中最小的 f(i)+1。设f(1)=0。后面的状态转移是j=1-nums(i),f(i+j)=min(f(i)+1,f(i+j)) 输入:5 [2,3,1,4,5] 输出:2 注:最优路径为:1->2->5
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。