题目选自
Leetcode 45. 跳跃游戏 ||

与跳跃游戏 | 的不同之处在于,我们需要求的是最少的跳跃次数~

题目描述:

解题思路:

思想

就一句话:每次在上次能跳到的范围(end)内选择一个能跳的最远的位置(也就是能跳到max_far位置的点)作为下次的起跳点 !

详解:

规的思维就是暴力穷举,把所有可行的跳跃方案都穷举出来,计算步数最少的。穷举的过程会有重叠子问题,用备忘录消除一下,就成了自顶向下的动态规划。

不过直观地想一想,似乎不需要穷举所有方案,只需要判断哪一个选择最具有「潜力」即可,这就是贪心思想来做,比动态规划效率更高。

比如上图这种情况,我们站在索引 0 的位置,可以向前跳 1,2 或 3 步,你说应该选择跳多少呢?

显然应该跳 2 步调到索引 2,因为 nums[2] 的可跳跃区域涵盖了索引区间 [3..6],比其他的都大

这就是思路,我们用 i 和 end 标记了可以选择的跳跃步数,farthest 标记了所有选择 [i..end] 中能够跳到的最远距离,jumps 记录跳跃次数。

看不懂? 再来详解:

 

解题代码:

int jump(int* nums, int numsSize){if(numsSize == 1) return 0;int end = 0 , farthest = 0;int jumps = 0;for(int i = 0; i < numsSize - 1; i++){farthest = fmax(nums[i] + i , farthest); //记录当前能到达的最远距离if(end == i){jumps++;end = farthest; //模拟每次能跳到的最远距离,然后“跳到”最远距离上,这时步数+1//当end == i 时表示,上一次跳jumps次已经到最大距离了,之后的距离肯定得+1}}return jumps;
}

贪心——跳跃游戏 II(Leetcode 45)相关推荐

  1. LeetCode 45.跳跃游戏II

    45.跳跃游戏 II 题目描述 给你一个非负整数数组 nums ,你最初位于数组的第一个位置. 数组中的每个元素代表你在该位置可以跳跃的最大长度. 你的目标是使用最少的跳跃次数到达数组的最后一个位置. ...

  2. leetcode 45.跳跃游戏 II

    一.题意 给出一个非负整数数组 nums ,数组中的每个元素代表在该位置可以跳跃的最大长度.使用最少的跳跃次数到达数组的最后一个位置.假设总是可以到达数组的最后一个位置. 二.解法 贪心算法. 解法一 ...

  3. _28LeetCode代码随想录算法训练营第二十八天-贪心算法 | 122.买卖股票的最佳时机II 、55.跳跃游戏、45.跳跃游戏II

    _28LeetCode代码随想录算法训练营第二十八天-贪心算法 | 122.买卖股票的最佳时机II .55.跳跃游戏.45.跳跃游戏II 题目列表 122.买卖股票的最佳时机II 55.跳跃游戏 45 ...

  4. 代码随想录算法训练营第三十二天_第八章_贪心算法 | 122.买卖股票的最佳时机II、55. 跳跃游戏、45.跳跃游戏II

    LeetCode 122.买卖股票的最佳时机II 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格.设计一个算法来计算你所能获取的最大利润.你可以尽可能地完成更多的交易(多次买卖一支股票 ...

  5. [Leedcode][JAVA][第45题][跳跃游戏 II][贪心算法]

    [问题描述][Leedcode][JAVA][第45题][跳跃游戏 II] 输入: [2,3,1,1,4] 输出: 2 解释: 跳到最后一个位置的最小跳跃数是 2.从下标为 0 跳到下标为 1 的位置 ...

  6. Leetcode 45. 跳跃游戏 II

    Leetcode 45. 跳跃游戏 II 题目 给你一个非负整数数组 nums ,你最初位于数组的第一个位置. 数组中的每个元素代表你在该位置可以跳跃的最大长度. 你的目标是使用最少的跳跃次数到达数组 ...

  7. leetcode 45. 跳跃游戏 II 46. 全排列

    leetcode 45. 跳跃游戏 II 46. 全排列 45. 跳跃游戏 II 难度中等1273收藏分享切换为英文接收动态反馈 给你一个非负整数数组 nums ,你最初位于数组的第一个位置. 数组中 ...

  8. 力扣记录:贪心算法3较难(1)区间问题——55 跳跃游戏,45 跳跃游戏II,452 用最少数量的箭引爆气球,435 无重叠区间,763 划分字母区间,56 合并区间

    本次题目 55 跳跃游戏 45 跳跃游戏II 452 用最少数量的箭引爆气球 435 无重叠区间 763 划分字母区间 56 合并区间 55 跳跃游戏 局部最优:不管每次跳多少步,取最大跳跃步数,若覆 ...

  9. leetcode 45跳跃游戏II

    跳跃游戏II 核心思想:当前范围内走不到目的地,更新下一个范围.下一个范围是当前范围内能走到的最远点 class Solution {public:int jump(vector<int> ...

最新文章

  1. 安全测试之XSS攻击
  2. 陈一舟:雷军马云在通讯领域也做不过马化腾 为何我就该挨骂
  3. 暑假集训考试反思+其它乱写
  4. linux与虚拟化实验室,Linux·学习笔记(2)虚拟化与仿真
  5. python书籍_Python书籍大汇总——入门到实战
  6. php上传文件测试代码,php 文件上传函数的超详细示例
  7. 只有在配置文件或 Page 指令中将 enableSessionState 设置为 true 时,才能使用会话状态。...
  8. pytorch入门_PyTorch入门
  9. 第二次作业:硬币游戏——代码分析与改进
  10. 数据分析学习记录(二)---响应曲面法及Design-Expert的简单使用
  11. java借助Acrobat实现pdf转word
  12. 树突状细胞(DC细胞)特征及应用进展综述
  13. Web自动化测试(Selenium自动化测试框架)
  14. 私钥,公钥的区分——私钥公钥讲解
  15. OpenCV安装及其开发环境配置(C++)
  16. Visual Studio创建C语言编程环境
  17. 北京奥运会Dashboard.Widgets
  18. 《无间道》中的“盲签字”
  19. php 抓取京东搜索页,京东商品列表页爬虫采集方法 - 八爪鱼采集器
  20. Linux系统引导过程(BIOS和Bootloader部分)

热门文章

  1. 请问delphix下双缓冲是自动开启的吗?
  2. python3 协程 写法_理解Python的协程(Coroutine)
  3. python运行方法_对python中执行DOS命令的3种方法总结
  4. wordpress汉化技巧_保护您的WordPress网站的6个技巧
  5. 您第一次上网的速度是多少?
  6. 第三方开源项目名称_如何为您的开源项目选择品牌名称
  7. 继续!面试继续!Netty dubbo的通信方式
  8. 代码组织和部署 文件操作 node.js 1
  9. Illustrator 描边,填充,扩展
  10. Bootstrap3 的新特性