LeetCode游戏跳跃贪心

package algorithm;
/**
 参考:https://blog.csdn.net/scarlett_guan/article/details/80159621
题目:
        给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。
你的目标是使用最少的跳跃次数到达数组的最后一个位置。

例如:
输入: [2,3,1,1,4]
输出: 2
解释: 跳到最后一个位置的最小跳跃数是 2。
     从下标为 0 跳到下标为 1 的位置,跳 1 步,然后跳 3 步到达数组的最后一个位置。


实例:
input{ 7, 0, 9, 6, 9, 6, 1, 7, 9, 0, 1, 2, 9, 0, 3}
初始化:i=0,位于起始位置input[0]=7, 如果只有一个元素,则无需步行,直接返回为0。
解释:
当数组数-1<=7时,只需一步,即可走完全程。 即
走一步能走最大距离为7,令最大值为aa=7
当需要2步时,能走的最大距离为:i+input[i], max(aa,i+input[i]),其中i为i=1-7. 此时aa最大为14.i=7.
当需要第3步时,走的最大距离为:i+input[i],此时i=8-14, 找最大max(aa,i+input[i])

 */

public class JumpGame {
    
    public static int getSteps(int[] input){
        if(input.length==1){
            return 0;
        }
        int maxSpace=input[0];
        int steps=1;
        int tmp=maxSpace;
        for(int i=1;i<input.length;i++){
            if(maxSpace>=input.length-1)
                return steps;
            while(i<maxSpace){
                tmp=Math.max(tmp,i+input[i]);
                i++;
            }
            maxSpace=Math.max(tmp, maxSpace+input[maxSpace]);
            steps++;
            
        }
        
        
        return steps;
    }

    public static void main(String[] args) {

        //int[] input={ 7, 0, 9, 6, 9, 6, 1,7, 9, 0, 1, 2, 9, 0, 3};
        
        int[] input={2,4,1,1,4,1};
        int result=getSteps(input);
        
        System.out.println("结果为:"+result);
        
    }

}
 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值