14.跳跃游戏Ⅱ

文章目录

大家好,我是晓星航。今天为大家带来的是 跳跃游戏Ⅱ 相关的讲解!😀

题目简介

题目解答

解法一:贪心算法+动态规划

思路:想象你在玩大富翁,回合制游戏,随身带的钱决定你每回合最多可以走多少格,需要以最短的回合数到达终点。 格子里面的数字代表"钱",每回合你需要停留在格子里休息得到补充的"钱"才能继续行走。 每次走到一个格子的时候,你需要估计预算在下一个回合能走多少格,哪个格子的钱最多,下一回合就去那个格子 。但是前面的格子里有多少钱有战争迷雾看不到,要到了才知道。 border 指本回合能走的最远位置,即钱用完了就不能继续往前了 maxPosition 就是钱

代码:

java 复制代码
class Solution {
    public int jump(int[] nums) {
        // 记录当前能跳跃到的位置的边界下标
        int border = 0;
        // 记录在边界范围内,能跳跃的最远位置的下标
        int maxPosition = 0;
        // 记录所用步数
        int steps = 0;
        for(int i=0;i<nums.length-1;i++){
            // 继续往下遍历,统计边界范围内,哪一格能跳得更远,每走一步就更新一次能跳跃的最远位置下标
            // 其实就是在统计下一步的最优情况
            maxPosition = Math.max(maxPosition,nums[i]+i);
            // 如果到达了边界,那么一定要跳了,下一跳的边界下标就是之前统计的最优情况maxPosition,并且步数加1
            if(i==border){
                border = maxPosition;
                steps++;
            }
        }
        return steps;
    }
}

代码注释很好的解释了每一行代码是干嘛的,看不懂的可以参考注释。

复杂度分析:

  • 时间复杂度:O(n),其中 n 是数组长度。
  • 空间复杂度:O(1)。

题目链接

45. 跳跃游戏 II

感谢各位读者的阅读,本文章有任何错误都可以在评论区发表你们的意见,我会对文章进行改正的。如果本文章对你有帮助请动一动你们敏捷的小手点一点赞,你的每一次鼓励都是作者创作的动力哦!😘

相关推荐
涛ing5 小时前
32. C 语言 安全函数( _s 尾缀)
linux·c语言·c++·vscode·算法·安全·vim
xrgs_shz6 小时前
MATLAB的数据类型和各类数据类型转化示例
开发语言·数据结构·matlab
独正己身6 小时前
代码随想录day4
数据结构·c++·算法
customer087 小时前
【开源免费】基于SpringBoot+Vue.JS体育馆管理系统(JAVA毕业设计)
java·vue.js·spring boot·后端·开源
Miketutu8 小时前
Spring MVC消息转换器
java·spring
乔冠宇8 小时前
Java手写简单Merkle树
java·区块链·merkle树
利刃大大9 小时前
【回溯+剪枝】找出所有子集的异或总和再求和 && 全排列Ⅱ
c++·算法·深度优先·剪枝
LUCIAZZZ9 小时前
简单的SQL语句的快速复习
java·数据库·sql
komo莫莫da9 小时前
寒假刷题Day19
java·开发语言
Rachela_z9 小时前
代码随想录算法训练营第十四天| 二叉树2
数据结构·算法