leetcode Jump Game

题目链接

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

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

阅读更多
个人分类: leetCode
上一篇leetcode Construct Binary Tree from Preorder and Inorder Traversal
下一篇leetcode Permutations II
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭