leetcode 45.跳跃游戏Ⅱ

题目描述:

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

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

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

本题首先需要一个思路,就是当前位置的元素保存的为可跳步长,如果能到尾巴,则直接结束,如果不能直接到

则需要寻找当前步长内可到达的最有利位置  什么是最有利位置呢  就是从当前位置到那个位置需要跳的长度 加上 那个位置的可跳步长(也就是那个位置的元素大小)

java代码实现:

class Solution {
    public int jump(int[] nums) {
        if(nums.length == 0 || nums.length == 1){
            return 0;
        }
        if(nums[0] >= nums.length-1){
            return 1;
        }
        int count = 0;
        int numjump = 0;
        int nextjump = 0;
        while(nums[numjump]+numjump < nums.length-1){
            if(nums[numjump] == 1){
                numjump += 1;
                count += 1;
                continue;
            }
            int max = 0;
            for(int i = numjump+1;i <= nums[numjump]+numjump;i++){
                if(max < nums[i]+i-numjump){
                    nextjump = i;
                    max = nums[i]+i-numjump;
                }
            }
            count += 1;
            numjump = nextjump;
        }
        return count+1;
    }
}

首先需要理清思路,然后编写代码时要细心,经常有元素和索引的思维转换

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值