55. Jump Game
来源:互联网 发布:淘宝里的旺旺号是什么 编辑:程序博客网 时间:2024/04/30 13:11
此题有两种解法,分别为DP和贪心,DP的算法复杂度为O(N^2),贪心的算法复杂度为O(N)。先介绍DP。
DP解法:
此题为一维DP。d[i]表示能不能跳到i处,要是能跳到,则再把从i处能跳到的别的地方全设置为true了。这样扫描一遍数组就可以了。代码如下:
class Solution {public: bool canJump(vector<int>& nums) { int n = (int)nums.size(); bool* d = new bool[n](); d[0] = true; for (int i = 0; i < n; i++) { if (d[i] == true) { for (int j = 1; j <= nums[i]; j++) { if (i + j < n) d[i + j] = true; } } } return d[n - 1]; }};
但是这个解法是TLE的,算法是两层循环,会进行很多重复操作(比如到j,从i已经跳到它过了,但是i+1也能跳到它,所以设置d[j]为true)。没必要把每个i能走到哪些地方都算出来,只要算出最后一跳能不能>=n-1就行了,也就是下面所说的贪心法。
贪心法:
只需要顺序扫描数组,记录下能够到达的最远位置。代码如下:
class Solution {public: bool canJump(vector<int>& nums) { int canArrive = 0, n = (int)nums.size();//canArrive为当前能到达的最远位置 for(int i = 0; i <= canArrive && canArrive < n-1; i++) if(i + nums[i] > canArrive)canArrive = i + nums[i]; return canArrive >= n-1; }};
0 0
- 55. Jump Game && 45. Jump Game II
- 55. Jump Game. 45. Jump Game II
- [LeetCode]55.Jump Game
- LeetCode 55.Jump Game
- LeetCode --- 55. Jump Game
- [Leetcode] 55. Jump Game
- [leetcode] 55.Jump Game
- 55. Jump Game
- 55. Jump Game
- [leetcode] 55.Jump Game
- *LeetCode 55. Jump Game
- LeetCode 55. Jump Game
- [leetcode] 55. Jump Game
- 55. Jump Game
- leetcode 55. Jump Game
- 55. Jump Game LeetCode
- 【LeetCode】55. Jump Game
- 55. Jump Game
- 防火墙问题
- 通过“分布式系统的8大谬误”反思APP的设计 第六篇 谬误6:只有一个管理者
- 【搜索】 HDU 5323 Solve this interesting problem
- java学习笔记(六) collections--stack
- html基础2
- 55. Jump Game
- Volley学习笔记(二):使用Volley加载网络图片
- 七月日记
- Android核心基础-7.Android 网络通信-1.获取文本数据
- 在windows系统下修改hosts文件,使其可以修改
- poj 3660 Floyd应用(确定牛的位置)
- 七月二十八日 Linux操作系统c语言学习笔记
- MySQL_ROW
- 控件——ImageView