LeetCode 45. 跳跃游戏 II 个人笔记--动态规划

动态规划,找到到达当前的上一个元素的跳跃次数加1就是到达当前位置的次数,心得写在注释里面了

class Solution {
    public int jump(int[] nums) {
        int[] dp=new int[nums.length];
            dp[0]=0;
            for (int i = 1; i < nums.length; i++) {
                int maxValue=0;
                int index=0;
                for (int j = i-1; j >=0; j--) {
                    if(nums[j]>=i-j){
                        //这段是错误理解,不需要找前面的最大值,
                        //因为那样的话更前面如果能够到达当前位置但是不是最大值,性价比更高,次数更少
                        //只要找能够到达的前提下最小就好了
                        //所以这样的倒叙遍历有个好处是不需要判断是不是最小,只要满足条件都会向前遍历并且更新,区间在边唱,值在变小,性价比增大
                        //若正序遍历的话,要判断是否是满足条件的最小值,区间长度和值都在变化,遍历过程中区间再缩短,值也在变小,性价比没有增大


                        /*if(nums[j]>maxValue){
                            maxValue=nums[j];
                            index=j;
                        }*/

                        index=j;
                    }
                }

                dp[i]=dp[index]+1;
            }
        return dp[nums.length-1];
    }
}

你可能感兴趣的:(leetcode,动态规划,java)