45. Jump Game II

题目:
https://leetcode.com/problems/jump-game-ii/description/

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

Note:
You can assume that you can always reach the last index.

分析:假设总是可以到达最后一个结点。再求最少的跳数。从0开始,最多可跳2次(A[0]=2)到达A[1],然后A[1]最多可跳3次,最远可跳到A[4]即末尾。所以最少跳数为2次。

在上诉过程中,关注的有:1.当前一共跳了多少次;2.jump次,跳到的最远位置;3.下一点,最远可以跳到什么位置;

所以设置3个变量:jump 表示当前一共跳了多少次;jump次,跳到的最远位置;next 表示jump+1次,最远可以跳到什么位置(在目前可达范围内,潜在的可以跳到的最远位置);

因为要遍历整个数组,所以一定有一个变量i,表示当前所在的位置。

class Solution {
    public int jump(int[] nums) {
        if(nums==null || nums.length<=0){
            return 0;
        }
        int jump = 0;
        int cur =0;
        int next = 0;
        for(int i=0;i<nums.length;i++){
            if(cur<i){//cur<i ;jump次,不能跳到i位置,所以还需要多跳1次或者几次;所以jump++;cur = next;
                jump++;
                cur = next;
            }
            //cur>=i;jump次,已经可以到达i位置了;
            next = Math.max(next,i+nums[i]);
            //在遍历数组的过程中,每次i++,都要更新next的值,next = Math.max(next,i+A[i]);
        }
        return jump;

    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值