LintCode 跳跃游戏

题目

给出一个非负整数数组,你最初定位在数组的第一个位置。

数组中的每个元素代表你在那个位置可以跳跃的最大长度。

判断你是否能到达数组的最后一个位置。

样例
A = [2,3,1,1,4],返回 true.

A = [3,2,1,0,4],返回 false.

分析

这个问题有两个方法,一个是贪心和 动态规划。

贪心方法时间复杂度为O(N)。

动态规划方法的时间复杂度为为O(n^2)。

代码

public class Solution {
    /**
     * @param A: A list of integers
     * @return: The boolean answer
     */
    public boolean canJump(int[] A) {
        boolean[] can = new boolean[A.length];
        can[0] = true;
        
        for(int i=1;i<A.length;i++) {
            for(int j=0;j<i;j++) {
                if(j+A[j]>=i && can[j]) {
                    can[i] = true;
                    break;
                }
                    
            }
        }
        
        return can[A.length-1];

    }
}

public class Solution {
    /**
     * @param A: A list of integers
     * @return: The boolean answer
     */
    public boolean canJump(int[] A) {
        if(A.length == 0 || A == null)
            return false;
        
        int farthest = A[0];
        
        for(int i=1;i<A.length;i++) {
            if(i+A[i]>farthest && farthest>=i)
                farthest = i+A[i];
        }
        
        return farthest >= A.length-1;

    }
}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 给出一个非负整数数组,你最初定位在数组的第一个位置。 数组中的每个元素代表你在那个位置可以跳跃的最大长度。 判断你...
    Arnold134777阅读 1,089评论 0 0
  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 12,790评论 0 33
  • 生词+短语+句子 Harbor - As for any worries that the public migh...
    zhangrong2阅读 664评论 0 0
  • 培训事项总结: 好的方面 1.今天来浙江市场进行培训,好的一点普通话有点加强 2.因为对产品内容更熟悉了,讲起来就...
    yuyujie阅读 205评论 0 0
  • 学习书法最有效的方法不外乎临摹,临摹碑帖是学习书法的必经之路和有效手段。但具体怎么临摹,难道就是照着写这一种方法吗...
    书法人生阅读 742评论 2 9