您的位置:首页 > 其它

55. Jump Game(dp, 贪心)

2017-09-16 15:35 387 查看
https://leetcode.com/problems/jump-game/description/

题目:判断是否可以跳到最后一个节点?

解法一:只要有一个可达的子节点能够到达最后一个节点,该节点即可到达最后一个子节点,否则无法到达。我们从后往前遍历。 例如: (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;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: