55. Jump Game

来源:互联网 发布:windows打印服务 编辑:程序博客网 时间:2024/06/18 09:54

深搜+剪枝

class Solution {public:    void Jump(vector<int>& nums,int sta,bool vist[],bool& tag)    {        if(sta>=nums.size()-1||sta+nums[sta]>=nums.size()-1)        {            tag=true;            return;        }        if(tag==true||vist[sta+nums[sta]])            return;                for(int i=nums[sta];i>=1;i--)        {            if(vist[sta+i])                break;            Jump(nums,sta+i,vist,tag);            vist[sta+i]=true;        }    }    bool canJump(vector<int>& nums) {        int n=nums.size();        bool tag=false;        bool vist[n+1];        memset(vist,0,sizeof(vist));        Jump(nums,0,vist,tag);        return tag;    }};


 贪心,纪录最远能到达的距离,O(n)

class Solution {public:    bool canJump(vector<int>& nums) {        int n=nums.size();        int rightmost=1;        for(int i=0;i<nums.size();i++)        {            rightmost--;            if(i+rightmost>=nums.size()-1)                return true;            if(nums[i]>rightmost)                rightmost=nums[i];            if(rightmost==0)                return false;        }        return true;    }};


0 0