【Leetcode】Jump Game II

原创 2013年12月05日 16:41:03

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.)

题意:给你一个数组,由数组起点0开始,每次可走的长度为0至所在位置的元素大小,问最少需要多少步可以走到终点?

一开始想到了递归的方法,但是很显然,这会超时,下面是超时的方法。

class Solution {
public:
    int jump(int A[], int n) {
        return Jump(A,n,0);
    }
    
    int Jump(int a[],int n,int pos)
    {
        if(pos>=n-1)
            return 0;
        int count=1;
        int m=a[pos];
        if(m==0)
            return n;
        int min=n;
        for(int i=m;i>=1;i--)
        {
            int temp=Jump(a,n,pos+i);
            if(temp<min)
                min=temp;
        }
        count+=min;
        return count;
    }
};

正确的方法是使用贪心算法。

使用两个指针start和end,维护一个最大覆盖区间,每次扫描时,都动态改变区间的边界。例如,在扫描A[start]至A[end]时,每次都计算A[i]+i的值,取得其最大值作为下次扫描的end边界,下次的start边界即为上次end+1,直到end>n。

class Solution {
public:
    int jump(int A[], int n) {
        int start=0;
        int end=0;
        int count=0;
        if(n==1)
            return 0;
        while(end<n)
        {
            count++;
            int max=0;
            for(int i=start;i<=end;i++)
            {
                if(A[i]+i>=n-1)
                    return count;
                if(A[i]+i>max)
                    max=A[i]+i;
            }
            start=end+1;
            end=max;
        }
    }
};



【LeetCode-面试算法经典-Java实现】【113-Path Sum II(路径和)】

【113-Path Sum II(路径和II)】【LeetCode-面试算法经典-Java实现】【所有题目目录索引】原题  Given a binary tree and a sum, find al...
  • DERRANTCM
  • DERRANTCM
  • 2015年08月12日 06:23
  • 2479

Jump Game II 跳跃游戏(求跳到最后一个的最小步数) @LeetCode

第一次遇到用DP还超时的问题!既然DP都超时,那么只能再一次用greedy了。 package Level4; import java.util.Arrays; /** * Jump Ga...
  • hellobinfeng
  • hellobinfeng
  • 2013年11月08日 09:37
  • 2507

【LeetCode-面试算法经典-Java实现】【219-Contains Duplicate II(包含重复元素II)】

【219-Contains Duplicate II(包含重复元素II)】【LeetCode-面试算法经典-Java实现】【所有题目目录索引】代码下载【https://github.com/Wang-...
  • DERRANTCM
  • DERRANTCM
  • 2015年08月29日 06:36
  • 3233

[LeetCode] Jump Game II

Jump Game II Given an array of non-negative integers, you are initially positioned at the fir...
  • wangshaner1
  • wangshaner1
  • 2015年06月25日 20:33
  • 676

LeetCode第45之 Jump Game II

看了好几种算法实现,感觉这里说的最清楚,也比较简单,本算法思想也是来源于此。 解法看完这道题目,可能大部分的读者都能够想出这样一个相对简单的解法:将每个位置都看作一个点,并从第i个点向它之后的num...
  • u011954296
  • u011954296
  • 2016年06月23日 19:24
  • 190

LeetCode Jump Game II

Description: Given an array of non-negative integers, you are initially positioned at the first...
  • miss_snow_m
  • miss_snow_m
  • 2016年01月09日 02:37
  • 203

LeetCode:Jump Game I && II

Jump Game   Given an array of non-negative integers, you are initially positioned at the first...
  • tianlongloved
  • tianlongloved
  • 2014年06月19日 23:40
  • 174

LeetCode No.45 Jump Game II

LeetCode No.45 Jump Game II
  • woshihuangjianwei
  • woshihuangjianwei
  • 2016年11月02日 20:24
  • 120

[C++]LeetCode: 104 Jump Game II (局部最优和全局最优法)

题目: Given an array of non-negative integers, you are initially positioned at the first index of t...
  • cinderella_niu
  • cinderella_niu
  • 2015年01月17日 12:45
  • 692

Leetcode45. Jump Game II

Leetcode45. Jump Game II
  • Earl211
  • Earl211
  • 2017年06月29日 10:47
  • 176
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【Leetcode】Jump Game II
举报原因:
原因补充:

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