Leetcode 之 Jump Game

原创 2015年07月08日 23:57:36

Given an array of non-negative integers, you are initially positioned at the first index of the array.

Each element in the array represents your maximum jump length at that position.

Determine if you are able to reach the last index.

For example:
A = [2,3,1,1,4], return true.

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

题目是看能不能根据每一跳的最大步长跳到最后的位置。开始用了DP,建一个布尔数组,遍历步长数组,把能到达的位置都置为true,最后判断最后一位是true还是false。

贴一下代码吧:

    public boolean canJump(int[] nums) {
        int len = nums.length;
        boolean can[] = new boolean[len];

        can[0] = true;
        for(int i = 0;i < len;i++){
            if(can[i] == true){
                for(int j = 0;j <= nums[i] && (i + j < len);j++){
                    can[j + i] = true;
                }
            }
        }

        return can[len - 1];
    }

然后就,华丽丽的TLE了。后来转念一想,应该用贪心,每次都往最远的地方走。

这时可以设置一个变量maxStep记录当前能够走的最远步数,往前移动一位就减一,同时与该位的步数进行比较,如果小的话,说明在这一位置能够走更远, 对maxStep进行更新。结束条件就是当前位置的坐标与maxStep之和能够大于数组长度。

上代码:

public boolean canJump(int[] nums){
        int len = nums.length;
        if(len == 0 || len == 1)    return true;
        int maxStep = nums[0];

        for(int i = 1;i < len;i++){
            if(maxStep == 0)    return false;
            maxStep--;
            if(maxStep < nums[i])   maxStep = nums[i];
            if(maxStep + i >= len - 1)  return true;
        }
        return false;
    }

71 / 71 test cases passed.
Status: Accepted
Runtime: 364 ms


Given an array of non-negative integers, you are initially positioned at the first index of the array.

Each element in the array represents your maximum jump length at that position.

Your goal is to reach the last index in the minimum number of jumps.

For example:
Given array A = [2,3,1,1,4]

The minimum number of jumps to reach the last index is 2. (Jump 1 step from index 0 to 1, then 3 steps to the last index.)

II是还要求出最小跳数,也就是要记录每一步是在哪儿跳的。还是用贪心。设置两个游标,一个记录当前能够到的最远位置curr,一个记录跳的停留的位置last。

大概的思路是:curr只顾着往前找能调到的最远位置就行,last负责记录每一步在那儿跳的,当i大于last时,就说明要跳了,这时候跳数增加,last更新到curr的位置。

另外,当i>curr时,说明已经超越了当前最远的位置,也就是到不了终点了。

public int jump(int[] nums){
        int last = 0;
        int curr = 0;
        int times = 0;

        for(int i = 0;i < nums.length;i++){
            if(i > curr)    return -1;
            if(i > last){
                last = curr;
                times++;
            }
            curr = Math.max(curr, i + nums[i]);
        }
        return times;
    }

91 / 91 test cases passed.
Status: Accepted
Runtime: 400 ms

版权声明:本文为博主原创文章,未经博主允许不得转载。

【算法分析与设计】【第三周】679. 24 Game

题目来源:https://leetcode.com/problems/24-game/ 周三刚复习了DFS,这周就做点有意思的题——求24点。相信求24点是大家的童年回忆,玩法也很简单:...
  • raoyx
  • raoyx
  • 2017年09月23日 12:10
  • 224

LeetCode 之 Jump Game(贪心算法)

LeetCode 之 Jump Game,本文给出基于动态规划思想、贪心算法的三种实现思路分析,最后,贴上三套C++详细源码实现。...
  • u013630349
  • u013630349
  • 2015年08月05日 11:05
  • 910

【LeetCode】Jump Game (一维动态规划 + 线性扫描)

Given an array of non-negative integers, you are initially positioned at the first index of the arra...
  • xiaozhuaixifu
  • xiaozhuaixifu
  • 2013年10月30日 15:23
  • 6637

LeetCode OJ 之 Jump Game (“跳跃”游戏 - 一)

题目: Given an array of non-negative integers, you are initially positioned at the first index of th...
  • u012243115
  • u012243115
  • 2015年01月12日 11:30
  • 295

数据结构与算法[LeetCode]——Jump Game I II

Jump Game II Given an array of non-negative integers, you are initially positioned at...
  • SUN20082567
  • SUN20082567
  • 2014年04月14日 19:39
  • 389

寻找最少次跳数 - 贪心VS动态规划 Jump Game 2

非常好的问题:Given an array of non-negative integers, you are initially positioned at the first index of t...
  • luckyjoy521
  • luckyjoy521
  • 2014年03月14日 12:35
  • 2346

【数据结构与算法】Jump Game

【题目】: 【解法】:第一开始,想到的是采用递归的方式,后来出现了栈泄露的错误。后来看了Discuss发现可以使用循环的方式。 [解法1] 从头到尾循环 每次的for循环只循环当前点能到的所...
  • u013177446
  • u013177446
  • 2017年01月05日 19:41
  • 112

LeetCode OJ 之 Jump Game II(“跳跃”游戏 - 二)

题目: Given an array of non-negative integers, you are initially positioned at the first index of...
  • u012243115
  • u012243115
  • 2015年01月13日 08:27
  • 459

【leetcode】Jump Game I, II 跳跃游戏一和二

题目: Jump Game I: Given an array of non-negative integers, you are initially positioned at th...
  • u012204343
  • u012204343
  • 2014年08月28日 00:55
  • 927

LeetCode OJ算法题(四十四):Jump Game II

题目: Given an array of non-negative integers, you are initially positioned at the first index of...
  • op_yu
  • op_yu
  • 2014年08月06日 12:43
  • 308
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Leetcode 之 Jump Game
举报原因:
原因补充:

(最多只允许输入30个字)