跳跃游戏

【题目】

给定arr数组,arr[i]=k表示从位置i最多可以向右跳k个位置。
如果从位置0出发,返回最少跳几次能跳到arr最后的位置上。

【例子】

arr=[3,2,3,1,1,4],
arr[0]=3,选择跳到位置2,
arr[2]=3,可以跳到最后的位置,
所以返回2,即跳两次

【代码】

public static void main(String[] args) {
        System.out.println(jump(new int[]{3,2,3,1,1,4}));//2
    }

    //跳跃问题
    public static int jump(int[] arr){
        if(arr==null||arr.length==0){
            return 0;
        }
        int jump=0;//目前跳了多少步
        int cur=0;//直跳jump步,最远到达的位置
        int next=0;//再多跳一步,最远到达的位置
        for(int i=0;i<arr.length;i++){      
            if(cur<i){//跳jump步不能到达位置I
                jump++;//要多跳一步
                cur=next;//更新最远位置
            }
            next=Math.max(next, i+arr[i]);
        }
        return jump;
    }

【说明】
从左遍历arr,假设遍历到位置i
1)如果cur>=i,说明跳Jump可以到达位置i,此时不需要做什么
2)如果cur

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值