LeetCode动态规划—跳跃游戏从跳到头到跳最少下跳到头(45、55)

2023-11-05

跳跃游戏

一个下标对应的值为3,那证明这个位置可以跳到前后3个位置的下标处。(±3均可达)
如果依次遍历完这个数组,有下标在跳跃过程中最远位置仍然不可达,即证明无法到达最后一个位置。
可以对每一个能作为 起跳点 的格子都尝试跳一次,把 能跳到最远的距离 不断更新
如果可以一直跳到最后,就成功了

class Solution {
public:
    bool canJump(vector<int>& nums) {
        // vector<int> res()
        int length = nums.size()-1;
        if(length == 0)
            return true;
        int max_index = 0;
        for(int i = 0;i < length;i++)
        {
            if(max_index < i)
                return false;;
            max_index = max(nums[i]+i,max_index);
            if(max_index >= length)
                return true;
        }
        return false;
    }
};

跳跃游戏Ⅱ

分析跳跃到最远位置会依赖于之前跳跃的位置及下标,应该从左到右进行更新,所以不用考虑回退问题。
参考基础的跳跃游戏,Ⅱ是基于一定可跳到最远处进行的最少次数求解问题。
在这里插入图片描述

一个下标对应的值为3,如果从当前下标起跳叫做第1次跳跃,那么从后面3个下标位置起跳都可以叫做第2次跳跃。
所以,当一次跳跃结束时,从下一个位置开始,到当前下标±3的位置(即最远的距离),都是下一次跳跃的范围(4~6)。

下标 0 1 2 3 4 5 6 7
num数组 3 1 1 1
跳跃次数 1 2 2 2

那我们可以遍历从4~6的位置尝试跳跃,直到试探到最远的位置,记录到max_index7。

跳完一次之后,更新下一次可以跳跃的范围(当前下标4~最远位置end6)。
直到跳到当前的范围边界end,此时更新范围边界,end=max_index。
在新的范围内跳,更新能跳到最远的距离max_index。
记录跳跃次数,如果跳到了终点,就得到了结果。

class Solution {
public:
    int jump(vector<int>& nums) {
        int length = nums.size();
        if(length == 1)
            return 0;
        int min_step = 0;
        int max_index = 0;
        int end = 0;
        for(int i = 0;i < length-1;i++)
        {
            max_index = max(nums[i] + i,max_index);
            if(i == end)
            {
                end = max_index;
                min_step++;
            }
        }
        return min_step;
    }
};
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

LeetCode动态规划—跳跃游戏从跳到头到跳最少下跳到头(45、55) 的相关文章

  • IIS+PHP+MySQL安装笔记

    2011 8 29安装成功 PHP的跨平台性和执行效率一直受到广大网络程序员的亲睐 它可以和各种Web服务器和数据库服务器整合 运行在各种平台上 提供强大的Web服务功能 且效率较高 唯一的缺点就是在和其他的Web Server整合时 需要
  • 图解自注意力机制

    写在最前边 这个文章是 图解GPT 2 The Illustrated GPT 2 Visualizing Transformer Language Models 的一部分 因为篇幅太长我就单独拿出来了 当然如果你只想了解自注意力机制可以只

随机推荐

  • Java学习心得1———面向对象的思想

    学习Java的第一天是学习面向对象的思想 思考方式 以下是我对面向对象思想的个人理解 面向对象是符合人类的思考方式的 因为我们平时观察和认知这个世界都是以对象为单位的 我们能分辨猫 狗 房子 车是不同的对象 我们知道猫这个对象有眼睛 有嘴巴
  • centos 7 confluence 安装

    1 环境准备 1 1 jdk安装 参考https my oschina net u 182501 blog 1837017 1 2 mysq安装 参考https my oschina net u 182501 blog 1832015 不过
  • HIVE表中导入导出数据的几种方式

    一 往HIVE表中导入导出数据 语法结构 带括号的表示可选择字段 LOAD DATA LOCAL INPATH filepath OVERWRITE INTO TABLE tablename PARTITION partcol1 val1
  • DBvisualizer中SQL Commander出现中文乱码

    DBvisualizer中的SQLCommander出现中文乱码的问题 设置字体就OK了 Tools gt toolProperties gt General gt Appearance gt Fonts gt
  • Audio采样率相关计算

    根据采样率计算buffer duration audio buffer的时长和timestamp在知道采样率的情况下是可以直接计算的 这里假设采样率是44100 那么以微妙为单位 1秒等于1000000微妙 一个采样的时间计算出来就是22微
  • 驼峰转下划线

    一 定义Student实体类 包含如下字段 public class Student private String name private Integer age private Date date JSONField name orde
  • c++day3

    stack h ifndef STACK H define STACK H include
  • 详解dp - 最长回文子序列

    给定一个字符串 s 找到其中最长的回文子序列 并返回该序列的长度 可以假设 s 的最大长度为 1000 类似问题 最长回文子串 首先找出状态转移方程 table i j table i 1 j 1 2 if s i s j else tab
  • SQLAlchemy链接池的使用

    1 倒入需要的模块 from sqlalchemy import create engine from sqlalchemy orm import sessionmaker from sqlalchemy pool import Queue
  • 关于element-ui的el-dialog页面不居中问题

    el dialog 貌似不设置样式的时候默认不居中显示 如下所示 有很多地方是需要用到居中的 并且比较美观 所以我修改了以下代码 gt gt gt 是为了样式穿透 gt gt gt el dialog display flex flex d
  • canvas实现跟随鼠标和跟随手指粒子特效

    原文出处 https blog csdn net IForDreams article details 75453450 效果图 代码
  • TTL值的含义以及与域名DNS TTL值的区别

    什么是TTL TTL是IP协议包中的一个值 被称为跳数 指定数据报被路由器丢弃之前允许通过的网段数量 在很多情况下数据包在一定时间内不能被传递到目的地 解决方法就是在一段时间后丢弃这个包 然后给发送者一个报文 由发送者决定是否要重发 TTL
  • 【Python 1-8】Python手把手教程之——列表List的管理

    作者 弗拉德 来源 弗拉德 公众号 fulade me 在上一节我们学习了如何创建一个列表 在列表里面插入 删除数据等操作 本节我们学习如何管理列表 遍历列表 在日常开发中 我们经常需要遍历列表的所有元素 对每个元素执行相同的操作 例如 在
  • 什么是 Thread 的中断标志?

    分析 回答 什么是 Thread 的中断标志 中断 interrupt 标志或中断状态是线程中断时设置的内部线程标志 flag 属性 怎么设置中断标志 要设置一个线程的中断标志 只需要简单的在线程对象上调用 thread interrupt
  • radius服务器无响应,radius认证(radius认证超时)

    radius认证 RADIUS是英文 RemoteAuthenticationDialInUserService 的缩写 是网络远程接入设备的客户和包含用户认证与配置信息的服务器之间信息交换的标准客户 服务器模式 它包含有关用户的专门简档
  • Mac系统上配置Vue.js环境

    在Mac系统上配置Vue js环境非常麻烦 幸运地找到了教程http www mamicode com info detail 1786370 html 第一步 Mac OS系统安装 brew 在终端运行 usr bin ruby e cu
  • 纯CSS实现导航栏下拉动画效果

    实现思路 导航栏的下拉效果通过在ul的li里再嵌套一个ul 再通过animation属性改变第二导航栏ul的高度来实现导航栏下拉动画效果 老铁没毛病 实现效果 HTML代码 div class nav ul li a href 奥利给 a
  • PHP-代码执行函数-命令执行函数

    目录 代码执行函数 1 eval 函数 2 assert 函数 3 call user func 函数 4 create function 函数 5 array map 函数 6 call user func array 函数 7 arra
  • 哲理故事300篇(中)

    哲理故事300篇 上 http blog csdn net andylin02 archive 2006 08 23 1109314 aspx 哲理故事300篇 下 http blog csdn net andylin02 archive
  • LeetCode动态规划—跳跃游戏从跳到头到跳最少下跳到头(45、55)

    跳跃游戏 跳跃游戏 跳跃游戏 跳跃游戏 一个下标对应的值为3 那证明这个位置可以跳到前后3个位置的下标处 3均可达 如果依次遍历完这个数组 有下标在跳跃过程中最远位置仍然不可达 即证明无法到达最后一个位置 可以对每一个能作为 起跳点 的格子