45. Jump Game II

这段代码优化了很久从之前的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;jlength;j++){

                dp[j] = Integer.MAX_VALUE;
            }

        for(int i=0;ilength;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]&&jlength;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;
    }
}

你可能感兴趣的:(leetcode刷题)