Jump Game II

原题链接Jump Game II

给定一个数组序列,序列中每一个元素的值表示最多可以向后跳多远,初始时从下标0开始,计算最少跳多少次可以到达末尾的元素位置。

刚开始是想用深度优先(dfs)+ 动态规划解决的,结果竟然超时了,看到答案后真是….哎╮(╯▽╰)╭


对于每个位置,它跳一次可以到达的位置是一个范围,而对于这个范围,跳一次可以到达的位置仍然是一个范围。以示例序列[2,3,1,1,4]为例。
初始时,在下标为0的位置上,可以到达的下标范围是[1,2]
对于下标1,可以到达的下标范围是[2,4]。对于下标2,可以到达的下标范围是[3,4]。所以范围[1,2]可以到达的范围是[3,4]。

所以如果每次移动的都是一个范围,那么直到这个范围包含最后一个位置,就说明已经到达末尾了。而移动的次数,就是移动范围的次数。
代码如下

class Solution {
public:int jump(vector<int>& nums) {int n = nums.size();int steps = 0;/* [start, end]记录当前达到的范围,初始为0 */int start = 0;int end = 0;while(end < n - 1){/* 找下次可以到达的最远位置 */int max_pos = 0;for(int i = start; i <= end; ++i)max_pos = std::max(max_pos, i + nums[i]);/* 对于可以到达最远位置的那个下标i,它可以到达的位置为[i+1, max_pos],即* start, ..., i, i+1, i+2, end, ... ,max_pos* 下次的范围就是[end + 1, max_pos] */start = end + 1;end = max_pos;++steps;}return steps;}
};

Jump Game

原题链接 Jump Game

这个就是判断能不能到达最右边,方法和上面一样,转换为广度优先解决
代码如下

class Solution {
public:bool canJump(vector<int>& nums) {int left = 0;int right = 0;while(right < nums.size() - 1){int max_pos = right;for(int i = left; i <= right; ++i)max_pos = std::max(max_pos, nums[i] + i);if(max_pos <= right)return false;left = right;right = max_pos;}return true;}
};

上面两道题主要是将题目转换为广度优先(bfs)进行解决。因为每个位置可以达到的位置都是一个范围,那么就导致不确定应该将它跳到哪,从而会有很多中可能,深度优先是依次考虑每种可能,会比较慢。而广度优先将所有的可能一起考虑,每次都移动一个范围,从而不需要那么多的迭代(递归)次数。

每天一道LeetCode-----数组序列,每个元素的值表示最多可以向后跳多远,计算最少跳多少次可以到达末尾相关推荐

  1. C语言试题三十七之求除一个2×m整型二维数组中最大元素的值,并将此值返回调用函数。

    1. 题目 请编写一个函数function,它的功能是:求除一个2×m整型二维数组中最大元素的值,并将此值返回调用函数. 2 .温馨提示 C语言试题汇总里可用于计算机二级C语言笔试.机试.研究生复试中 ...

  2. 动态数组,数组初始化,数组内存释放,向数组中添加一个元素,向数组中添加多个元素,数组打印,顺序查找,二分查找,查找数组并返回地址,冒泡排序,改变数组中某个元素的值,删除一个数值,删除所有,查找含有

     1定义接口: Num.h #ifndef_NUM_H_ #define_NUM_H_ #include<stdio.h> #include<stdlib.h> /**** ...

  3. 删除数组中指定元素_如何删除PHP数组元素键值并重新排序

    点击蓝字关注我们!每天获取最新的编程小知识! 源 / php中文网      源 / www.php.cn 想要删除PHP数组中某个元素键值,然后重新规范索引排序.我们可以使用PHP中的内置函数uns ...

  4. 动态二维数组外圈元素值的和_C语言 | 用指向元素的指针变量输出二维数组元素的值...

    例33:有一个3*4的二维数组,要求用C语言实现指向元素的指针变量输出二维数组个元素的值. 解题思路:二维数组的元素时整型的,它相当于整型变量,可以用int*型指针变量指向它.二维数组的元素在内存中是 ...

  5. php怎么截取数组最后元素,PHP如何获取数组最后一个元素的键和值?(图文+视频)...

    在PHP面试题中经常会出现关于PHP数组的基础操作知识点,比如PHP删除数组中重复元 素,php数组转 换为字符串等等基础题. 本篇文章再给大家介绍关于PHP数组的一个常见面试题,PHP获取数组最后一 ...

  6. php 未定义数组索引_如何删除PHP数组元素键值并重新排序

    点击蓝字关注我们!每天获取最新的编程小知识! 源 / php中文网      源 / www.php.cn 想要删除PHP数组中某个元素键值,然后重新规范索引排序.我们可以使用PHP中的内置函数uns ...

  7. php如何根据条件删除二维数组中的元素

    需求是在一个二维数组中,根据数组中某个元素的值是否为0来判断是否将这个元素删除 $result = array();foreach ( $data as $i => $v ) { $id = $ ...

  8. 如何给数组中的元素赋值?

    如果把单个变量看成是"游兵散勇"的话,那么数组对应的是"集团".集团的"兵"就是我们前面说的数组的元素.这些"兵"不再有 ...

  9. 数组用法以及引用类型和值类型

     1. 数组的特点: a. 可以存储多个数据.  b. 存储的这多个数据的类型必须是相同的. 在声明的时候指定元素的类型.  c. 数组的长度是固定的, 在声明的时候要求必须指定数组的长度,一旦指定 ...

最新文章

  1. php 字符 hash_php常用hash加密函数
  2. mysql 获取 row的id_转: MYSQL获取更新行的主键ID
  3. java中super()_Java 泛型中 extends 和 super 的区别是什么?
  4. 计算机辅助教学导学设计研究,《计算机辅助教学》实验报告
  5. Android Zygote分析
  6. Java的ClassLoader
  7. APL平台对C++开发者的价值和作用
  8. 【文摘】 雪念——作者:蓝色妖姬
  9. onvif device manager 找不到ipc_Qt音视频开发32-Onvif网络设置
  10. python机器学习库xgboost——xgboost算法
  11. 由一段JS代码引发的思考
  12. 单片机C语言控制16*16LED显示屏,基于单片机的pwm控制16*16led点阵亮度调节怎么做啊,...
  13. 基于SSM框架的电影订票系统
  14. 思维方式-《策略思维》书中的精髓:生活工作中博弈无处不在,理解博弈论、善用策略思维,能帮助我们做出更好的决策。
  15. Mysql从入门到入魔——8. 视图、存储过程、事务处理
  16. 节点是什么意思?什么是节点?
  17. uIP TCP/IP协议栈在51系列单片机上的应用
  18. linux概述及环境搭建
  19. 公众号快速注册并认证小程序功能介绍
  20. JetBrains Mikhail Vink:助开发者Keep Evolving

热门文章

  1. vat可以退税吗_【涨知识】企业对外投资可以申请出口退税吗?
  2. spring注解方式 idea报could not autowire
  3. Android 关于“NetworkOnMainThreadException”
  4. Jboss/Wildfly安装配置
  5. 控制uibutton的title范围
  6. HDU 4405 Aeroplane chess(期望DP)
  7. 极有收藏价值的一组难求纯4位数字.com域名 #8847#含义你懂的。 http://t.cn/ae9CTd
  8. VS2005 VSTO 项目创建
  9. 逻辑漏洞-token绕过
  10. PHP-代码审计-SQL注入