LeetCode45. 跳跃游戏 II

2023-10-29

/**
 * 45. 跳跃游戏 II
 * 给定一个非负整数数组,你最初位于数组的第一个位置。
 *
 * 数组中的每个元素代表你在该位置可以跳跃的最大长度。
 *
 * 你的目标是使用最少的跳跃次数到达数组的最后一个位置。
 *
 * 假设你总是可以到达数组的最后一个位置。
 *
 *
 *
 * 示例 1:
 *
 * 输入: [2,3,1,1,4]
 * 输出: 2
 * 解释: 跳到最后一个位置的最小跳跃数是 2。
 *      从下标为 0 跳到下标为 1 的位置,跳 1 步,然后跳 3 步到达数组的最后一个位置。
 * 示例 2:
 *
 * 输入: [2,3,0,1,4]
 * 输出: 2
 *
 *
 * 提示:
 *
 * 1 <= nums.length <= 1000
 * 0 <= nums[i] <= 105
 */

// 递归
class Solution {
public:
    int jump(vector<int> &nums)
    {
        jump(nums, nums.size() - 1);
        return step;
    }

private:
    int step{};
    void jump(const vector<int> &nums, int index)
    {
        if (index == 0) {
            return;
        }
        for (int i = 0; i < index; i++) {
            if (i + nums[i] >= index) {
                step++;
                jump(nums, i);
                return;
            }
        }
        return;
    }
};

// 贪心
class Solution {
public:
    int jump(vector<int> &nums)
    {
        int step{};
        int reach{};
        while (reach < nums.size() - 1) {
            int maxReach{};
            int nextReach{};
            for (int index = 1; index <= nums[reach]; index++) {
                if (reach + index >= nums.size() - 1) {
                    return step + 1;
                }
                if (reach + index + nums[reach + index] > maxReach) {
                    nextReach = reach + index;
                    maxReach = nextReach + nums[nextReach];
                }
            }
            reach = nextReach;
            step++;
        }
        return step;
    }
};

// 贪心
class Solution {
public:
    int jump(vector<int> &nums)
    {
        int maxReach{};
        int step{};
        int end{};
        for (int reach = 0; reach < nums.size() - 1; reach++) {
            maxReach = max(maxReach, reach + nums[reach]);
            if (reach == end) {
                end = maxReach;
                step++;
            }
        }
        return step;
    }
};

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

LeetCode45. 跳跃游戏 II 的相关文章

  • 2023华为OD机试真题【端口合并/贪心算法】

    题目描述 有 M 1 lt M lt 10 个端口组 每个端口组是长度为N 1 lt N lt 100 的整数数组 如果端口组间存在2个及以上不同端口相同 则认为这2个端口组 互相关联 可以合并 第一行输入端口组个数M 再输入M行 每行逗号
  • 力扣45.跳跃游戏II 动态规划与贪心两种解法

    问题 给定一个长度为 n 的 0 索引整数数组 nums 初始位置为 nums 0 每个元素 nums i 表示从索引 i 向前跳转的最大长度 换句话说 如果你在 nums i 处 你可以跳转到任意 nums i j 处 0 lt j lt
  • python 中字典{ }的嵌套

    在机器学习中会用字典的嵌套来存储决策树的信息 对绘制树形图有很大的作用 其中嵌套字典的生成是一个递归的过程 如下所示 gt gt gt s a 0 no 1 flippers 0 no 1 maybe b 构造字典 gt gt gt s a
  • 《面试准备》c/c++贪心算法实例

    贪心算法问题1 西红柿首富的烦恼 王多鱼获得了一笔的奖金X 要求购买最少的商品把钱花光 即没有零钱剩下 否则奖金会被没收 输入 一个整数k 商品的种类 每个种类商品个数不限 第i类商品的价值a i 一个整数m 奖金总额 输出 最少商品数量
  • java实现二分查找-两种方式

    二分查找是一种查询效率非常高的查找算法 又称折半查找 起初在数据结构中学习递归时实现二分查找 实际上不用递归也可以实现 毕竟递归是需要开辟额外的空间的来辅助查询 本文就介绍两种方法 二分查找算法思想 有序的序列 每次都是以序列的中间位置的数
  • 【100%通过率 】租车骑绿岛【华为OD机试 真题c++/java/python 2022 Q4

    华为OD机试 题目列表 2023Q1 点这里 2023华为OD机试 刷题指南 点这里 题目描述 部门组织绿岛骑行团建活动 租用公共双人自行车 每辆自行车最多坐两人 最大载重M 给出部门每个人的体重 请问最多需要租用多少双人自行车 输入描述
  • 贪心算法-背包问题C++

    1 问题 给定n种物品和一个背包 物品i的重量是Wi 其价值为Vi 背包的容量为C 应如何选择装入背包的物品 使得装入背包中物品的总价值最大 2 算法解析 此算法的贪心策略在于Sort排序函数 背包问题与0 1背包问题不同在于背包问题可以将
  • NOIP2011提高组 DAY2 题解&总结

    考试时的心态 这次离线赛考的是NOIP2011 考得比较差 其实试卷比较水 水出新高度了 但是就考了160分 还是因为大意了 说实话 我一直在想第二题那个Sigma 是怎么计算的 很虚 虽然最后证明我的想法是正确的 但是由于这道题花的时间太
  • 1827. 最少操作使数组递增 ----- 贪心算法

    给你一个整数数组 nums 下标从 0 开始 每一次操作中 你可以选择数组中一个元素 并将它增加 1 比方说 如果 nums 1 2 3 你可以选择增加 nums 1 得到 nums 1 3 3 请你返回使 nums 严格递增 的 最少 操
  • 1489. 田忌赛马 (贪心,区间dp)

    题目 田忌赛马的故事 田忌每次输一局要付200元 赢一局获得200元 平局获得0元 问 田忌和齐王都有n匹马的情况下 最多可以获得多少元 1489 田忌赛马 AcWing题库 由于田忌赛马的故事背景 我们很快就能够想到合理的贪心策略 上等马
  • 递归递归递归

    function DG htmlDom n n for var i 0 i lt htmlDom length i var navSubmenu htmlDom i nav submenu var item htmlDom i if nav
  • 简单的动态规划——装箱问题

    装箱问题 告诉你箱子的容积为多少 告诉你有N件物品和每一件物品的体积 问如何选择物品才能令箱子的剩余容积最小 搜索递归 include
  • Basic Level 1023 组个最小数 (20分)

    题目 给定数字 0 9 各若干个 你可以以任意顺序排列这些数字 但必须全部使用 目标是使得最后得到的数尽可能小 注意 0 不能做首位 例如 给定两个 0 两个 1 三个 5 一个 8 我们得到的最小的数就是 10015558 现给定数字 请
  • day32 贪心

    122 买卖股票的最佳时机II 每天都有着卖出和不卖出两种状态 dp解决 55 跳跃游戏 贪心找到最大的覆盖范围 每次都看覆盖范围是否超过了总范围 超过即可 45 跳跃游戏II 贪心找到最大的覆盖范围 和 最小步数 package algo
  • Python实现找零兑换的三种解法

    找零兑换 找零兑换问题最直接的解法就是贪心策略 比如问题 有面值1 5 10 25的硬币 求解兑换63元所需的最少硬币数 贪心策略的思想就是不断的利用面值最大的硬币去尝试 不行了 在尝试较小面值的硬币 该例中也即使用25的硬币去尝试 2枚2
  • 2023华为OD机试真题【缓存需要最少金币数/贪心算法】

    题目描述 静态扫描可以快速识别源代码的缺陷 静态扫描的结果以扫描报告作为输出 1 文件扫描的成本和文件大小相关 如果文件大小为N 则扫描成本为N个金币 2 扫描报告的缓存成本和文件大小无关 每缓存一个报告需要M个金币 3 扫描报告缓存后 后
  • 【贪心算法】阿里巴巴与四十大盗——背包问题与0-1背包问题

    前言 关于贪心算法 我在这篇博客中已经做了简单的介绍 初识贪心算法 下面来介绍一下贪心算法中的一个经典的问题 背包问题 一 问题描述 一天 阿里巴巴赶着一头毛驴上山砍柴 无意间在远处发现了一群盗贼 他们把偷窃强盗来的宝物全部藏在一个山洞里
  • 信奥一本通 贪心算法 回顾

    文章目录 写在前面 A 家庭作业 B 智力大冲浪 C 加工生产调度 D 喷水装置3 线段覆盖最少线段 E 活动安排 线段覆盖 覆盖最多段 F 种树 G 数列极差 H 数列分段 I 钓鱼 J 均分纸牌 K 糖果传递 写在前面 之前看到一篇非常
  • 雪糕的最大数量 排序+贪心

    雪糕的最大数量 雪糕的最大数量 题目描述 样例 数据范围 思路 代码 题目描述 夏日炎炎 小男孩 Tony 想买一些雪糕消消暑 商店中新到 n 支雪糕 用长度为 n 的数组 costs 表示雪糕的定价 其中 costs i 表示第 i 支雪
  • 算法设计与实现--贪心篇

    贪心算法 贪心算法是一种在每一步选择中都采取当前状态下最优决策的算法 以期望能够通过一系列局部最优的选择达到全局最优 贪心算法的关键是定义好局部最优的选择 并且不回退 即一旦做出了选择 就不能撤销 一般来说 贪心算法适用于满足以下两个条件的

随机推荐

  • MATLAB数字图像处理(三)——图像轮廓提取与边缘检测

    文章目录 二值图像轮廓提取 灰度图像边缘检测 含噪图像边缘检测 均值滤波函数 二值图像轮廓提取 根据掏空内部点算法 运用Matlab编程实现二值图像的轮廓提取 以二值图像circles为例 I imread circles png subp
  • 几何变换详解

    几何变换详解 在三维图形学中 几何变换大致分为三种 平移变换 Translation 缩放变换 Scaling 旋转变换 Rotation 以下讨论皆针对DirectX 所以使用左手坐标系 平移变换 将三维空间中的一个点 x y z 1 移
  • Centos7更新glibc2.18

    Centos7更新glibc2 18 查看glibc版本 下载解压glibc2 18 编译安装 结果验证 查看glibc版本 查看glibc版本 ldd version 下载解压glibc2 18 参考 https blog csdn ne
  • 记录使用ESP32做WiFi模块使用的学习

    这里使用ESP32作为WiFi模块 使用STA模式或者AP模式 目录 前言 二 配置WiFi模式 1 STA模式 2 AP模式 3 AP STA模式 三 实现ESP32与电脑端通信 ESP32的数据接收与传输 ESP32的完整代码 前言 因
  • cephadm快速部署指定版本ceph集群

    官方文档 https docs ceph com en pacific 1 虚拟机规划 主机名 IP 角色 ceph1 192 168 150 120 cephadm mon mgr osd ceph2 192 168 150 121 mo
  • 四大主流芯片架构(X86、ARM、RISC-V和MIPS)

    目前市场上主流的芯片架构有 X86 ARM RISC V和MIPS四种 序号 架构 特点 代表性的厂商 运营机构 发明时间 1 X86 性能高 速度快 兼容性好 英特尔 AMD 英特尔 1978年 2 ARM 成本低 低功耗 苹果 谷歌 I
  • STM32-WWDG窗口看门狗-库函数版本

    参考资料 1 正点原子探索者STM32f407开发板 STM32f407开发指南 库函数版本 第12章 2 STM32F4xx 官方参考资料 STM32F4xx中文参考手册 第19章 目录 WWDG时钟 产生RESET的原理 超时值计算公式
  • unity与android交互独立jar不依附于主activity和manifest

    我们一般android与unity交互是android建立一个主activity继承unityplayactivity然后出jar 然后出一个manifest 那么问题来了 这样一个jar只能适应一个项目 现在plugins下面已经有三方的
  • 【计算机视觉

    文章目录 一 分割 语义相关 5篇 1 1 SAMUS Adapting Segment Anything Model for Clinically Friendly and Generalizable Ultrasound Image S
  • 如何激活conda的环境呢

    要激活 conda 环境 需要在命令行或终端中输入以下命令 condaactivate lt 环境名称 gt 其中 lt 环境名称 gt 是你要激活的 conda 环境的名称 例如 如果要激活名为 myenv 的 conda 环境 则需要输
  • CMD常用的DOS命令

    一 CMD的打开方式 1 开始 系统 命令提示符 2 win R 输入cmd 3 在任意文件夹下按住shift键 鼠标右击 在此处打开命令行 4 资源管理器前面打上cmd 空格 二 管理员方式运行 1 开始 系统 命令提示符 右击管理员权限
  • 如何无代码快速制作AR特效和滤镜?Lens Studio官方案例详解之Paper Head

    我首先在这个网页看了一下Lens Studio的总体介绍 然后想跟着Templates提供的模板快速上手 其中第一个模板就是Paper Head 但是我发现 模板看着简单 但是其背后的很多概念 逻辑还是搞不太清的 所以可能还是要去看文档 但
  • 协方差矩阵的matlab计算

    在统计学与概率论中 协方差矩阵是一个矩阵 其每个元素是各个向量元素之间的协方差 Wiki 协方差矩阵的计算以列向量为单位 是列向量各元素之间的关系的表达 定义为 一个列向量也叫做一个样本向量 列向量中的元素代表样本 列向量中的元素的个数的和
  • 六大软件开发模型详解

    软件测试工作与软件开发模型息息相关 在不同的软件开发模型中 测试的任务和作用也不相同 因此测试人员要充分了解软件开发模型 以便找准自己在其中的定位与任务 软件开发模型规定了软件开发应遵循的步骤 是软件开发的导航图 它能够清晰 直观地表达软件
  • 手把手教你实现AVL树、平衡二叉树

    今天 小编带大家一起来学习平衡二叉树 AVL树 吧 以下就简称AVL树了 想必能点开这篇博客的朋友都是极度深爱计算机的 那今天就让我们一起揭开AVL树的神秘面纱吧 目录 一 基本概念 二 实现原理 一 右旋转 二 左旋转 三 整体思路 四
  • Orcad17.4原理图导出PDF

    1 选取需要导出PDF的工程文件 2 修改页面顺序 更改的顺序即PDF输出页面顺序 此步骤需使用Shift或Ctrl选中 Ctrl A无法全选 左右拖动找到Schematic Page Number和Page Number 两项都需修改 点
  • Linux ssh升级后无法登陆

    无法3个不支持的选项 我们在 ssh config和sshd config中注视掉就好了 GSSAPIAuthentication GSSAPICleanupCredentials Unsupported option UsePAM 5 在
  • MyBatis新增数据时自增id的两种写法

    MyBatis新增数据时自增id的两种写法 一 单个插入 方式一 方式二 二 批量插入 三 注意 一 单个插入 接口方法 public interface PlayerDao int insertOnePlayer Player playe
  • Qt Quick 手册

    Qt Quick 简介 Qt Quick提供了一套高动态 丰富的QML元素来定制用户界面的说明性框架 Qt Quick有助于 程序开发员与界面设计员的合作为便携式设备建立流畅的用户界面 例如 移动电话 媒体播放器 机 顶盒以及上网本等 Qt
  • LeetCode45. 跳跃游戏 II

    45 跳跃游戏 II 给定一个非负整数数组 你最初位于数组的第一个位置 数组中的每个元素代表你在该位置可以跳跃的最大长度 你的目标是使用最少的跳跃次数到达数组的最后一个位置 假设你总是可以到达数组的最后一个位置 示例 1 输入 2 3 1