leetcode45题:跳跃游戏II

1、题目描述

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

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

你的目标是使用最少的跳跃次数到达数组的最后一个位置。

样例

给出数组A = [2,3,1,1,4],最少到达数组最后一个位置的跳跃次数是2(从数组下标0跳一步到数组下标1,然后跳3步到数组的最后一个位置,一共跳跃2次)

2、思想

3、代码实现

利用贪心策略,用两个变量i和temp标识当前的位置和下一步能跳到的最远距离。

class Solution {
    public int jump(int[] A) {
        if(A.length<=1){
            return 0;
        }
        int i=0;//当前所跳的长度
        int j=0;
        int count = 0;//需要走的步数
        while(i<A.length){
            if(i+A[i]>=A.length-1){
                count++;
                return count;
            }
            int temp = Integer.MIN_VALUE;////下一步所能跳到的最远距离
            for(int k=i+1;k<=i+A[i];k++){
                if(temp<k+A[k]){
                    temp=k+A[k];
                    j=k;
                }
            }
            i=j;//确定从当前位置要跳到哪里,使当前跳跃和下一次跳跃和的效果是最大的
            count++;
        }
        return 0;
        
    }
}

猜你喜欢

转载自blog.csdn.net/g1607058603/article/details/80946642
今日推荐