动态规划:跳跃游戏

这篇具有很好参考价值的文章主要介绍了动态规划:跳跃游戏。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一)跳跃游戏:

55. 跳跃游戏 - 力扣(LeetCode)

一)定义一个状态表示:

dp[i]表示以i未知元素为起点,是否能够到达最后一个位置

二)根据状态表示推到状态转移方程:根据最近的一步来进行划分问题

我们可以从当前i位置向后走j步,看看从i+j的位置是否能够到达最后一个位置,那么就说明从i位置可以到达i+j位置,从i+j位置可以到达最后一个位置,那么就是说明从i位置是可以到达最后一个位置的

class Solution {
    public boolean canJump(int[] nums) {
    //dp[i]表示以i位置为起点,是否能够到达最后一个位置
    boolean[] dp=new boolean[nums.length];
    dp[nums.length-1]=true;
    for(int i=nums.length-2;i>=0;i--){
        for(int j=0;j<=nums[i];j++){
            if(dp[i+j]==true){
//只要能够保证后面有一个值可以跳跃到array.length-1的位置,dp[i]的值就是true
                dp[i]=true;
                break;
            }
        }
    }
  return dp[0];
    }
}
三)初始化+填表顺序+返回值

填表顺序:从左向右,初始化为dp[array.length-1]=true,返回值是dp[0]

二)跳越游戏(2)

45. 跳跃游戏 II - 力扣(LeetCode)文章来源地址https://www.toymoban.com/news/detail-603608.html

class Solution {
    public int jump(int[] nums) {
//dp[i]表示以i位置为起点,是否能够到达最后一个位置的下标
    boolean[] dp=new boolean[nums.length];
    int[] g=new int[nums.length];
//g[i]表示以i位置元素为开始,到达元素末尾的最小次数
    for(int i=0;i<g.length;i++){
        g[i]=Integer.MAX_VALUE;
    }
    dp[nums.length-1]=true;
    g[nums.length-1]=0;
    
    for(int i=nums.length-2;i>=0;i--){
        //分为两种情况,从i位置有直接能力开始直接跳转到最后一个位置
        if(nums[i]>=nums.length-1){
            g[i]=1;
            dp[i]=true;
            continue;
        } 
        //再分为一种情况,从i位置先跳转到j位置,再求从j位置到达结尾的最小次数
        for(int j=1;j<=nums[i];j++){
            if(i+j<=nums.length-1&&dp[i+j]==true){
                dp[i]=true;
                g[i]=Math.min(g[i],g[i+j]+1);
         }
     }
    }
    System.out.println(Arrays.toString(g));
    return g[0];
}
}

到了这里,关于动态规划:跳跃游戏的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 力扣55. 跳跃游戏(动态规划)

    Problem: 55. 跳跃游戏 我们将问题稍做转换 每次求取当前位置可以走到的最远位置 ,在此基础上我们将最终判断是否能走出整个nums;同时我们要判断 中途会不会遇到某个位置是0使得不能继续走下去 时间复杂度: O ( n ) O(n) O ( n ) ;其中 n n n 为数组nums的大小 空间复杂度: O ( 1

    2024年02月21日
    浏览(30)
  • 跳跃游戏 (DFS->记忆化搜索->动态规划/贪心证明)

            跳跃游戏是一种典型的算法题目,经常是给定一数组arr,从数组的某一位置i出发,根据一定的跳跃规则,比如从i位置能跳arr[i]步,或者小于arr[i]步,或者固定步数,直到到达某一位置,可能是数组的最后一个位置,也有可能是某一特别的数值处,也有可能在这个

    2024年02月03日
    浏览(29)
  • 【动态规划算法】第十题:174.地下城游戏

    💖作者:小树苗渴望变成参天大树🎈 🎉作者宣言:认真写好每一篇博客💤 🎊作者gitee:gitee✨ 💞作者专栏:C语言,数据结构初阶,Linux,C++ 动态规划算法🎄 如 果 你 喜 欢 作 者 的 文 章 ,就 给 作 者 点 点 关 注 吧! 今天我开始讲解动态规划第十题,也是路径问题的最后一

    2024年02月13日
    浏览(34)
  • 【动态规划】【C++算法】1563 石子游戏 V

    【数位dp】【动态规划】【状态压缩】【推荐】1012. 至少有 1 位重复的数字 动态规划汇总 几块石子 排成一行 ,每块石子都有一个关联值,关联值为整数,由数组 stoneValue 给出。 游戏中的每一轮:Alice 会将这行石子分成两个 非空行(即,左侧行和右侧行);Bob 负责计算每一

    2024年02月21日
    浏览(28)
  • 【算法刷题 | 贪心算法04】4.26(跳跃游戏、跳跃游戏||)

    给你一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个下标,如果可以,返回 true ;否则,返回 false 。 示例一: 示例二: 6.2.1贪心思路 一般思路:当前位置元素如果是 3,我究竟

    2024年04月27日
    浏览(29)
  • 【动态规划】【 矩阵】【逆向思考】C++算法174地下城游戏

    视频算法专题 动态规划汇总 矩阵 逆向思考 恶魔们抓住了公主并将她关在了地下城 dungeon 的 右下角 。地下城是由 m x n 个房间组成的二维网格。我们英勇的骑士最初被安置在 左上角 的房间里,他必须穿过地下城并通过对抗恶魔来拯救公主。 骑士的初始健康点数为一个正整数

    2024年02月03日
    浏览(39)
  • DAY37:贪心算法(四)跳跃游戏+跳跃游戏Ⅱ

    给定一个非负整数数组 nums ,你最初位于数组的 第一个下标 。 数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个下标。 示例 1: 示例 2: 提示: 1 = nums.length = 3 * 104 0 = nums[i] = 105 思路 游戏大致规则如下图。每一步代表着能跳跃的最大长

    2024年02月12日
    浏览(35)
  • 算法 贪心2 || 122.买卖股票的最佳时机II 55. 跳跃游戏 45.跳跃游戏II

    如果想到其实 最终利润是可以分解的 ,那么本题就很容易了! 如何分解呢? 假如第0天买入,第3天卖出,那么利润为:prices[3] - prices[0]。 相当于(prices[3] - prices[2]) + (prices[2] - prices[1]) + (prices[1] - prices[0])。 此时就是把利润分解为每天为单位的维度,而不是从0天到第3天整体去

    2023年04月13日
    浏览(34)
  • 跳跃游戏【贪心算法】

    跳跃游戏 给你一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个下标,如果可以,返回 true ;否则,返回 false 。在这里插入图片描述

    2024年02月11日
    浏览(31)
  • 贪心算法-01:跳跃游戏

    贪心算法是动态规划的一个特例,相对于动态规划,使用贪心算法需要满足更多条件,但是效率比动态规划要高。 贪心选择的性质就是:每一步都做出一个局部最优解,最终的结果就是全局最优。不过这是一种特殊性质,只有一部分问题拥有这个性质。 比如面前放有100张人

    2024年01月22日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包