55. Jump Game(dp, 贪心)
2017-09-16 15:35
387 查看
https://leetcode.com/problems/jump-game/description/
题目:判断是否可以跳到最后一个节点?
解法一:只要有一个可达的子节点能够到达最后一个节点,该节点即可到达最后一个子节点,否则无法到达。我们从后往前遍历。 例如: (0表示不可达,1表示可达)
所以我们得出不可达。
解法二:贪心。
黑色即为 fast 。黄线表示fast内部的线,我们并不需要考虑内部线,因为对于1号节点来说,它可以到达2,3号节点,但是后面我们会再一次判断2,3号节点。所以会重复,因此我们每次只需要考虑fast以外的点即可。
题目:判断是否可以跳到最后一个节点?
解法一:只要有一个可达的子节点能够到达最后一个节点,该节点即可到达最后一个子节点,否则无法到达。我们从后往前遍历。 例如: (0表示不可达,1表示可达)
3 2 1 0 4 0 0 0 0 1
所以我们得出不可达。
class Solution { public: bool canJump(vector<int>& nums) { int len=nums.size(),temp; int *B=new int[len]; for(int x=len-1;x>=0;x--) { B[x]=(x==len-1)?1:0; for(int y=1;y<=nums[x]&&x+y<len;y++){ if(B[x+y]==1){ B[x]=1; break; } } } temp=B[0]; delete [] B; return temp; } };
解法二:贪心。
黑色即为 fast 。黄线表示fast内部的线,我们并不需要考虑内部线,因为对于1号节点来说,它可以到达2,3号节点,但是后面我们会再一次判断2,3号节点。所以会重复,因此我们每次只需要考虑fast以外的点即可。
class Solution { public: bool canJump(vector<int>& nums) { int fast=nums[0],len=nums.size(); for(int x=1;x<len;x++) fast=(x<=fast&&x+nums[x]>fast)?x+nums[x]:fast; return fast>=len-1; } };
相关文章推荐
- [leetcode]55. Jump Game 贪心
- leetcode55. Jump Game (贪心)
- leetcode 55. Jump Game [贪心]
- 55. Jump Game 类别:贪心算法 难度:medium
- 55. Jump Game(贪心)
- 55. Jump Game(贪心)
- Codeforces 618 D Hamiltonian Spanning Tree 贪心+dp
- Leetcode 贪心 Jump Game
- Codeforces_484D:Kindergarten(贪心/DP)
- [bzoj4027][HEOI2015][兔子与樱花] (树形dp思想+玄学贪心)
- oldssoj2674Delicious Apples(离散+贪心+环上折半dp)
- UVALive 7959|Gym 101201H|Paint|DP|贪心
- [Codeforces 814D] An overnight dance in discotheque 树形dp,贪心
- DP 贪心【p2134】百日旅行
- hdu 3466 Proud Merchants(贪心+DP)
- hdu4976 贪心+dp
- LeetCode--55. Jump Game
- NOIP模拟题 River Path Word[排序][贪心][DP]
- Doing Homework again HDU 1789 贪心?DP
- 【Codeforces708C】【树形dp】【贪心】Cen 4000 troids