一个数组存储了非负整型数据,数组中的第i个元素a[i],代表了可以从数组第i个 位置最多向前跳跃a[i]步;已知数组各元素的情况下,求是否可以从数组的第0个位置跳跃到数组的最后一个元素的位置,返回是true或者false判断是否能够跳跃到结尾

例如:
nums = [2, 3, 1, 1, 4] ,可以从nums[0] = 2 跳跃至 nums[4] = 4;
nums = [3, 2, 1, 0, 4] ,不可以从nums[0] = 3 跳跃至 nums[4] = 4

  1. 贪心规律:
    想要判断最终是否能够跳跃到终点,最快的办法即选择每次跳跃获取到的跳跃范围中最大的跳跃点;
    比如:nums = [2 3 1 1 4]
    第一次跳 为2,那么接下来可以跳一次,跳到nums[1] = 3;或者跳跃2次,nums[2] = 1
    如何选择第二次跳呢,根据贪心算法,我们想要更快得完成任务,优先选择能够跳的次数最多的点,即nums[1],因为它能够在第二次跳3次,但是nums[2]只能跳1次

    所以,贪心规律即为 每次跳跃的落点,为接下来可跳跃范围中最大的值;站在巨人的肩膀上可以跳得更远。

  2. 迭代策略:

    1. 求从第i位置最远可跳至第index[i]位置: 根据从第i位置最远可跳nums[i]步: index[i] = nums[i] + i;
    2. 初始化:
      1)设置变量jump代表当前所处的位置,初始化为0;
      2)设置变量max_index代表从第0位置至第jump位置这个过程中,最远可到达的位置,
      初始化为index[0]。
    3. 利用jump扫描index数组,直到jump达到index数组尾部或jump超过max_index,扫描过程中, 更新max_index。
    4. 若最终jump 为数组长度,则返回true,否则返回false。

实现算法如下:

bool judge_finish(vector<int> &stage) {vector<int> index;/*构造最远跳至的 index列表*/for (int i = 0; i < stage.size(); ++i) {index.push_back(i + stage[i]);}int max_index = stage[0];int jump = 0;/*筛选条件为要求为jump达到数组尾且 jump不能超过index数组,否则当前道路为不可达*/while(jump < index.size() && jump <= max_index) {if (max_index < index[jump]) {max_index = index[jump];}jump ++;}/*当 jump达到数组尾,即此时已经能够走完*/if (jump == index.size()) {return true;}return false;
}

测试代码如下:

#include <iostream>
#include <vector>using namespace std;bool judge_finish(vector<int> &stage) {vector<int> index;for (int i = 0; i < stage.size(); ++i) {index.push_back(i + stage[i]);}int max_index = stage[0];int jump = 0;while(jump < index.size() && jump <= max_index) {if (max_index < index[jump]) {max_index = index[jump];}jump ++;}if (jump == index.size()) {return true;}return false;
}int main() {vector<int> s;int tmp;cout << "input arr " <<endl;for (int i =0;i < 5; ++i) {cin >> tmp;s.push_back(tmp);}cout << "the true or false that judge the result is " << judge_finish(s) << endl;return 0;
}

输出如下:

input arr
3 2 2 0 5
the true or false that judge the result is 1

贪心:Jump Game 跳跃游戏相关推荐

  1. 运用贪心思想解决跳跃游戏

    运用贪心思想解决跳跃游戏 文章目录 运用贪心思想解决跳跃游戏 Jump Game I 1.题目描述 2.分析 3.代码 Jump Game II 1.问题描述 2.分析 3.动规代码[超时] 4.贪心 ...

  2. C++jump game跳跃游戏的算法(附完整源码)

    C++jump game跳跃游戏的算法 C++实现jump game跳跃游戏的算法完整源码(定义,实现,main函数测试) C++实现jump game跳跃游戏的算法完整源码(定义,实现,main函数 ...

  3. 贪心法—— LeetCode45 跳跃游戏II(跳跃游戏进阶版)

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

  4. 贪心算法:跳跃游戏总结

    55. 跳跃游戏:给定一个非负整数数组,你最初位于数组的第一个位置. 数组中的每个元素代表你在该位置可以跳跃的最大长度. 判断你是否能够到达最后一个位置. 遍历能到达的最远距离end(初始化为n[0] ...

  5. 《中英双解》leetCode Jump Game(跳跃游戏)

    You are given an integer array nums. You are initially positioned at the array's first index, and ea ...

  6. 55/45 Jump Game 跳跃游戏

    55 Jump Game 思路:贪心算法,每次记录可以跳到的最远距离. class Solution { public:bool canJump(vector<int>& nums ...

  7. [贪心]leetcode55:跳跃游戏(medium)

    题目: 题解: 贪心法 思路一:对每一个能作为起跳点的格子都尝试跳一次,把能跳到最远的距离不断更新. 比如[3,2,1,0,4]:第一个作为起跳点的格子可以跳跃的距离是3,那么表示后面 3 个格子[2 ...

  8. 55. Jump Game(跳跃游戏)

    题目链接:https://leetcode.com/problems/jump-game/ 此题的思路同Leetcode45,jumpGame2. Leetcode 45 就是用一个值来保存最大右边界 ...

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

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

最新文章

  1. Django连接数据mysql
  2. Realm发布Realm .NET,扩展支持.NET技术栈
  3. STM32 RTC实时时钟
  4. Eclipse——热键amp;Help
  5. 旁门左道也谈cacti安装
  6. java学到哪里最容易蒙,蒙哥比vs蒙克(目前最好的哪个)
  7. CSS和HTML面试题
  8. linux chrome无法上网,Chromium浏览器(Linux Chrome)无法显示WebGL
  9. 自旋锁spin : spin_lock_irq , spin_lock_irqsave
  10. JSP开发常用问题解决
  11. 5.微服务:从设计到部署 --- 事件驱动数据管理
  12. arr访问绝对地址_ECSHOP源码里的图片的相对地址改为绝对地址 (1)
  13. 3dmax外挂神器更新了|3dmax外挂在过去几年里,食住玩都更新记录了3dmax外挂的什么功能?
  14. 修改谷歌浏览器缓存位置总结
  15. [ROS] sh脚本文件,source : not found问题
  16. js  计算是今天多少周
  17. 【python学习】列表、元组、字典、集合(详解)
  18. 服务器pg信号指的是什么信号,主板的复位信号和PG信号
  19. vscode remote ssh无法建立连接或一直需要输入密码
  20. 人人宝靠谱吗,合规合法吗?

热门文章

  1. 无法使用xcode打出ipa包的解决方法
  2. 经典贪心法:时间序列问题及其全局最优性证明
  3. codeforces 165B(Burning Midnight Oil)
  4. Linux Mount Windows域用户限制的共享文件夹
  5. 将动态aspx页面转换成为静态html页面的几种方法
  6. window对象提供的功能之窗口最大化
  7. linux 脚本 alias,在shell脚本中使用alias别名
  8. mysql 小型机_小型机宕机问题 - Oracle数据库管理 - ITPUB论坛-中国专业的IT技术社区...
  9. 正则 不区分大小写_为什么要学正则表达式 7
  10. java 定时器获得外部参数_JMeter定时器使用小结