美文网首页动态规划
LintCode 跳跃游戏

LintCode 跳跃游戏

作者: Arnold134777 | 来源:发表于2016-03-26 21:29 被阅读652次

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

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

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

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

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

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

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

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

我们手动设置小型数据集,使大家阔以通过测试的两种方式。这仅仅是为了让大家学会如何使用动态规划的方式解决此问题。如果您用动态规划的方式完成它,你可以尝试贪心法,以使其再次通过一次。

分析:

一:动态规划
canJumps[i] = (canJumps[j] && (j + maxSteps[j] >= i));(0 <= j < i)

代码:

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

二:贪心做法

自上而下,依此寻找可以一步跳跃到该点的上一个点,且上个点离该点最远,由于是自上而下,所以当当满足最后meet_index == 0时,表示可以满足条件。

代码:

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

相关文章

  • LintCode 跳跃游戏

    给出一个非负整数数组,你最初定位在数组的第一个位置。 数组中的每个元素代表你在那个位置可以跳跃的最大长度。 判断你...

  • 跳跃游戏

    可以正向扫描数组,记录当前位置可以到达最远的位置,a、游标要小于可以到达最远的位置,否则return false。...

  • 跳跃游戏

    【链接】https://nanti.jisuanke.com/t/18【题目】给定一个非负整数数组,假定你的初始位...

  • 跳跃游戏

    LintCode题目地址给出一个非负整数数组,你最初定位在数组的第一个位置。数组中的每个元素代表你在那个位置可以跳...

  • 跳跃游戏

    给定一个非负整数数组,你最初位于数组的第一个位置。 数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否...

  • 跳跃游戏

    给出一个非负整数数组,你最初定位在数组的第一个位置。 数组中的每个元素代表你在那个位置可以跳跃的最大长度。 判断你...

  • 跳跃游戏

    在跳跃游戏中,要明白贪心法则的定义。贪心法则:最基本的理解就是,每次选择当前最优的解,到最后就能得到整个问题的最优...

  • 跳跃游戏

    题目来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/jump...

  • 跳跃游戏

    题目需求 给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断...

  • 跳跃游戏

    题目: 题目的理解: 从index为0开始跳,看是否能跳到最后一位。那么可以反过来思考,从最后一位A向后查,是否有...

网友评论

    本文标题:LintCode 跳跃游戏

    本文链接:https://www.haomeiwen.com/subject/aqwdlttx.html