LeetCode 55. Jump Game

Problem

题目链接

Notes

第一反应是dp题,dp[i]记录是否能从0下标跳到1,能的话赋值为1,否则为0。提交虽然过了,但时间很长。
在对第一次的提交做优化时想到,其实第二层循环完全可以不用,因为我们只关心能不能到最后,那么我们在外层循环i时,用一个常量记录,在0~i这个范围内,能跳到最远的下标就行,若i大于了这个常量,则证明0~i范围内跳不到i下标标注的位置,那么肯定也就跳不到最后。这其实就是一种贪心的思想。

Codes

方法一:

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

方法二:

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

Results

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值