动态规划——leetcode55、跳跃游戏

1、题目描述:

  

 2、解题方法:动态规划

  动态规划解题步骤:

    1、定状态:

    • 最后一步:如果能跳到最后一个下标,我们考虑他的最后一步到n-1(最后一个下标),这一步是从 i 跳过来的,i<n-1;    

      这需要满足两个条件:

      1. 可以跳到 i ;
      2. 最后一步跳跃的距离 <= 从i可以跳跃的最大距离,即 n-1-i <= nums[i]
    • 子问题:我们需要知道能不能跳到i

     状态:设f[j]能不能跳到石头j

    2、转移方程:

    

    3、初始条件和边界情况:

      初始条件:f[0] = True,因为一开始就在0位置

    4、计算顺序:

      计算:f[1],f[2],...,f[n-1]

    时间复杂度:O(n2),空间复杂度(数组大小):O(n)

3、代码:

复制代码
public boolean canJump(int[] nums) {
        int n = nums.length;
        boolean[] f = new boolean[n];
        f[0] = true;
        for(int j = 1; j < n; j++){
            f[j] = false;
            for(int i = 0; i < j; i++){
                if(f[i] && i + nums[i] >= j){
                    f[j] = true;
                    break; 
                }
            }
        }
        return f[n-1];
    }
复制代码

 

 

 

  

 

posted @   大力出奇迹_o  阅读(45)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示