关闭

leetcode Jump Game

86人阅读 评论(0) 收藏 举报
分类:

题目链接

这个题目很明显的就能想到一个动态规划的算法

public class Solution {
    public boolean canJump(int[] nums) {
        boolean[] record=new boolean[nums.length];
        record[0]=true;
        for(int i=0;i<nums.length;i++)
        {
            for(int j=0;j<i;j++)
            {
                if(record[j]&&j+nums[j]>=i)
                {
                    record[i]=true;
                    break;
                }
            }
        }
        return record[record.length-1];
    }
}

不过提交上系统会有超时。。。
这个题目有一个贪心的解法。。算法在下面

int reach=nums.length-1;
        for(int i=nums.length-1;i>=0;i--)
        {
            if(nums[i]+i>=reach)
            {
                reach=i;
            }
        }
        return reach==0;

reach是我们维护的可以达到的一个点。而在这个点之后的所有点我们都可以达到。成立的原因就是。数组中存的是最多可以走多少步,若不是必须走多少步。这就可以用贪心来解。

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:73860次
    • 积分:3814
    • 等级:
    • 排名:第8666名
    • 原创:319篇
    • 转载:26篇
    • 译文:0篇
    • 评论:3条
    最新评论