lintcode:跳跃游戏——解析

来源:互联网 发布:数据库设置主键的语句 编辑:程序博客网 时间:2024/05/19 06:17

跳跃游戏:

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

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

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

样例

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

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

分析:运用贪心算法,算出每次能够到达的最远路径,同当前数组长度进行比较。

算法解析:

    public boolean canJump(int[] A) {
        // wirte your code here
        int len=A.length;
        int i=0;
        int max=0;
        while(i<=max){    //如果当前能够到达的最远距离已经小于当前数组下标了,直接返回false(包括循环结束) 例如[1,1,0,2];[1,1,2,1,0]
            if((i+A[i])>max) //当前能够到达的最远距离,是当前数组下标加上数组值。
            max=i+A[i];
            i++; //数组下标向后移动一位
            if(max>=len-1) //如果当前能到达的最远距离,已经超过数组长度,则返回true.
            return true; //注:数组长度应该减1,因为第一步,并没有移动,直接到达了数组第一位.
        }
        return false;
    }
}