45. Jump Game II

本文介绍了一种优化后的跳跃算法实现,通过动态规划思想将执行时间从400ms降低至13ms。文中详细展示了代码逻辑及关键优化点,如使用最大可达距离减少重复计算。

这段代码优化了很久从之前的400ms,到了13ms,加了个max,具体看注释,我总觉得这是动态规划。

public class Solution {
    public int jump(int[] nums) {
       int[]dp =new int[nums.length];
        dp[0] =  1;
        int max=0;
            for(int j=1;j<nums.length;j++){

                dp[j] = Integer.MAX_VALUE;
            }

        for(int i=0;i<nums.length;i++){

            if(i+nums[i]>=nums.length-1){//这个是我为了优化写的
                dp[nums.length-1] = Math.min(dp[i]+1,dp[nums.length-1]);
                return dp[nums.length-1]-1;
            }else{

                for(int j=max;j<=i+nums[i]&&j<nums.length;j++){//为了让他不用重复扫描,只要前面的数能到一次,他就是最少的次数;如果i变了,再从i到j,大部分都重复了,于是用了max,这是时间的大头。
                    if(dp[j]!=Integer.MAX_VALUE)continue;
                    dp[j] = Math.min(dp[i]+1,dp[j]);
                }
                max = i+nums[i];
            }
        }
        return dp[nums.length-1]-1;
    }
}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值