码迷,mamicode.com
首页 > 其他好文 > 详细

Jump Game -- leetcode

时间:2015-01-22 15:31:35      阅读:146      评论:0      收藏:0      [点我收藏+]

标签:leetcode   面试   jump   game   

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.


算法一

思路:从后往前推,

为了跳到结尾,

每往前倒推一步,累加步数,并看看当前位置的值是否大于该步数。

如果该值大于需求步数,则表示从该位置可以跳到结尾。

则此位置可以视作新的结尾。将问题缩减为,看是否能跳到此新结尾。

此算法在leetcode上实际执行时间为18ms。

class Solution {
public:
    bool canJump(int A[], int n) {
        int step = 0;
        for (int i=n-1; i>=0; i--, step++)
                if (A[i] >= step)
                        step = 0;

        return !--step;
    }
};







下面两则算法摘自leetcode:


算法二:

 从后往前推       本算法来源

记录下,能跳到结尾的最小位置。

如果当前位置,能够跳到最小位置。则当前位置成为新的最小位置。

bool canJump(int A[], int n) {
    int last=n-1,i,j;
    for(i=n-2;i>=0;i--){
        if(i+A[i]>=last)last=i;
    }
    return last<=0;
}



算法三:

从前往后,看能到达的最远距离。

此算法在leetcode上实际执行时间为17ms。 本算法来源

bool canJump(int A[], int n) {
    int i = 0;
    for (int reach = 0; i < n && i <= reach; ++i)
        reach = max(i + A[i], reach);
    return i == n;
}



Jump Game -- leetcode

标签:leetcode   面试   jump   game   

原文地址:http://blog.csdn.net/elton_xiao/article/details/43019029

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!