贪心:Jump Game 跳跃游戏
一个数组存储了非负整型数据,数组中的第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
贪心规律:
想要判断最终是否能够跳跃到终点,最快的办法即选择每次跳跃获取到的跳跃范围中最大的跳跃点;
比如:nums = [2 3 1 1 4]
第一次跳 为2,那么接下来可以跳一次,跳到nums[1] = 3;或者跳跃2次,nums[2] = 1
如何选择第二次跳呢,根据贪心算法,我们想要更快得完成任务,优先选择能够跳的次数最多的点,即nums[1],因为它能够在第二次跳3次,但是nums[2]只能跳1次所以,贪心规律即为 每次跳跃的落点,为接下来可跳跃范围中最大的值;站在巨人的肩膀上可以跳得更远。
迭代策略:
- 求从第i位置最远可跳至第index[i]位置: 根据从第i位置最远可跳nums[i]步: index[i] = nums[i] + i;
- 初始化:
1)设置变量jump代表当前所处的位置,初始化为0;
2)设置变量max_index代表从第0位置至第jump位置这个过程中,最远可到达的位置,
初始化为index[0]。 - 利用jump扫描index数组,直到jump达到index数组尾部或jump超过max_index,扫描过程中, 更新max_index。
- 若最终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 跳跃游戏相关推荐
- 运用贪心思想解决跳跃游戏
运用贪心思想解决跳跃游戏 文章目录 运用贪心思想解决跳跃游戏 Jump Game I 1.题目描述 2.分析 3.代码 Jump Game II 1.问题描述 2.分析 3.动规代码[超时] 4.贪心 ...
- C++jump game跳跃游戏的算法(附完整源码)
C++jump game跳跃游戏的算法 C++实现jump game跳跃游戏的算法完整源码(定义,实现,main函数测试) C++实现jump game跳跃游戏的算法完整源码(定义,实现,main函数 ...
- 贪心法—— LeetCode45 跳跃游戏II(跳跃游戏进阶版)
跳跃游戏II 题目: 给定一个非负整数数组,你最初位于数组的第一个位置. 数组中的每个元素代表你在该位置可以跳跃的最大长度. 你的目标是使用最少的跳跃次数到达数组的最后一个位置. 示例: 输入: [2 ...
- 贪心算法:跳跃游戏总结
55. 跳跃游戏:给定一个非负整数数组,你最初位于数组的第一个位置. 数组中的每个元素代表你在该位置可以跳跃的最大长度. 判断你是否能够到达最后一个位置. 遍历能到达的最远距离end(初始化为n[0] ...
- 《中英双解》leetCode Jump Game(跳跃游戏)
You are given an integer array nums. You are initially positioned at the array's first index, and ea ...
- 55/45 Jump Game 跳跃游戏
55 Jump Game 思路:贪心算法,每次记录可以跳到的最远距离. class Solution { public:bool canJump(vector<int>& nums ...
- [贪心]leetcode55:跳跃游戏(medium)
题目: 题解: 贪心法 思路一:对每一个能作为起跳点的格子都尝试跳一次,把能跳到最远的距离不断更新. 比如[3,2,1,0,4]:第一个作为起跳点的格子可以跳跃的距离是3,那么表示后面 3 个格子[2 ...
- 55. Jump Game(跳跃游戏)
题目链接:https://leetcode.com/problems/jump-game/ 此题的思路同Leetcode45,jumpGame2. Leetcode 45 就是用一个值来保存最大右边界 ...
- [Leedcode][JAVA][第45题][跳跃游戏 II][贪心算法]
[问题描述][Leedcode][JAVA][第45题][跳跃游戏 II] 输入: [2,3,1,1,4] 输出: 2 解释: 跳到最后一个位置的最小跳跃数是 2.从下标为 0 跳到下标为 1 的位置 ...
最新文章
- Django连接数据mysql
- Realm发布Realm .NET,扩展支持.NET技术栈
- STM32 RTC实时时钟
- Eclipse——热键amp;Help
- 旁门左道也谈cacti安装
- java学到哪里最容易蒙,蒙哥比vs蒙克(目前最好的哪个)
- CSS和HTML面试题
- linux chrome无法上网,Chromium浏览器(Linux Chrome)无法显示WebGL
- 自旋锁spin : spin_lock_irq , spin_lock_irqsave
- JSP开发常用问题解决
- 5.微服务:从设计到部署 --- 事件驱动数据管理
- arr访问绝对地址_ECSHOP源码里的图片的相对地址改为绝对地址 (1)
- 3dmax外挂神器更新了|3dmax外挂在过去几年里,食住玩都更新记录了3dmax外挂的什么功能?
- 修改谷歌浏览器缓存位置总结
- [ROS] sh脚本文件,source : not found问题
- js 计算是今天多少周
- 【python学习】列表、元组、字典、集合(详解)
- 服务器pg信号指的是什么信号,主板的复位信号和PG信号
- vscode remote ssh无法建立连接或一直需要输入密码
- 人人宝靠谱吗,合规合法吗?
热门文章
- 无法使用xcode打出ipa包的解决方法
- 经典贪心法:时间序列问题及其全局最优性证明
- codeforces 165B(Burning Midnight Oil)
- Linux Mount Windows域用户限制的共享文件夹
- 将动态aspx页面转换成为静态html页面的几种方法
- window对象提供的功能之窗口最大化
- linux 脚本 alias,在shell脚本中使用alias别名
- mysql 小型机_小型机宕机问题 - Oracle数据库管理 - ITPUB论坛-中国专业的IT技术社区...
- 正则 不区分大小写_为什么要学正则表达式 7
- java 定时器获得外部参数_JMeter定时器使用小结