LeetCode 045 Jump Game II
来源:互联网 发布:手机上头像源码怎么用 编辑:程序博客网 时间:2024/05/22 05:09
题目给出一个数组,数组中的数字表示在这个位置上可以最多可以跳多远的距离。从0位置开始跳,问最少跳多少步可以到数组末尾。
例如:
Given array A = [2,3,1,1,4]
The minimum number of jumps to reach the last index is 2. (Jump 1 step
from index 0 to 1, then 3 steps to the last index.)
首先想到的是每次跳跃必然是向末尾跳的。如果一个解含有向开头跳的步骤,那么往开头跳的那一步和前一步:
-------------> <--------
必然可以用往末尾跳的一步替代:
-------------> <------------->
因为最多可以跳多少并不代表一定要跳多少。
然后就可以得到一个递推公式:令f[i]表示跳到i位置的最少步骤。
边界条件:
f[0]=0f[i]=INT_MAX i>0
方程:
f[i+j]=min(f[i+j],f[i]+1) 1<=j<=A[i]
需要用两重循环,时间复杂度太高。
因此需要优化。
观察f,可发现f一定是递增的。因为不可能跳的更近反而步数更多。所以只需要一重循环即可,记录当前可跳到的最远位置,和下一步可跳到的最远位置。如果当前位置i大于当前可跳到的最远位置,就把所需步数加一,当前可跳到的最远位置设为下一步可跳到的最远位置。同时更新下一步可跳到的最远位置:max(i+A[i])。
时间复杂度为O(n)。
0 0
- LeetCode 045 Jump Game II
- [LeetCode]045-Jump Game II
- LeetCode 045 Jump Game II
- LeetCode: Jump Game II
- LeetCode Jump Game II
- LeetCode: Jump Game II
- [Leetcode] Jump Game II
- [LeetCode] Jump Game II
- [Leetcode] Jump Game ii
- leetcode Jump Game II
- leetcode Jump Game II
- [LeetCode]Jump Game II
- [leetcode]Jump Game II
- LeetCode-Jump Game II
- [leetcode] Jump Game II
- LeetCode - Jump Game II
- LeetCode:Jump Game II
- LeetCode | Jump Game II
- Android M InCallUI动画简析
- C语言中访问结构体成员时 点 . 和 箭头 -> 的区别
- View事件分发机制
- Linux 网络 I/O 模型简介(图文)
- HTML文档设置标记
- LeetCode 045 Jump Game II
- hdu 2852 线段树 单点更新
- Leetcode no. 257
- ReactNative(三)——WebStorm的基本配置
- Hibernate错误
- IntentFilter过滤规则
- 框架 day37 Spring事务管理,整合web,SSH整合,SSH整合注解
- #iOS多线程编程及GCD简介
- Android N画中画模式