leetcode 45. Jump Game II(贪心)

题目描述:

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.

Your goal is to reach the last index in the minimum number of jumps.

Example:

Input: [2,3,1,1,4]
Output: 2
Explanation: 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.

思路:

遍历数组元素,每到达一个元素,都判断当前元素所能到达的最远点(最远点取之前元素到达的最远点和当前能到达的最远点之间的较大值)。

重点:

何时进行步数的自加?当我们遍历的元素到达之前所能到达的边界时,则去更新下一个边界,并且对步数+1,表示我们前进一步。

何时结束判断:当我们到达上一跳的边界后,如果我们判断当前能到达的最远距离已经到了整个数组的最后,则返回目前记录的步数。这是我们到达末尾所用的最少步数。

步数的自加,边界的更新和是否结束判断都是到达上一跳的边界之后进行的。

实现:

class Solution {
    public int jump(int[] nums) {
        if(nums.length==1) return 0;
        if(nums[0]>=nums.length-1) return 1;
        int step=1;//记录到达数组末尾所需要的最少步数
        int last=nums[0];//记录历史能到达的最远位置
        int curr=0;//记录当前能到达的最远位置
        for(int i=1;i<nums.length;i++){
            curr=Math.max(curr,i+nums[i]);
            if(i==last){
                last=curr;
                step++;
                if(curr>=nums.length-1){
                    return step;
                }
            }
            
        }
        return -1;        
    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值