每天一道LeetCode-----数组序列,每个元素的值表示最多可以向后跳多远,计算最少跳多少次可以到达末尾
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-----数组序列,每个元素的值表示最多可以向后跳多远,计算最少跳多少次可以到达末尾相关推荐
- C语言试题三十七之求除一个2×m整型二维数组中最大元素的值,并将此值返回调用函数。
1. 题目 请编写一个函数function,它的功能是:求除一个2×m整型二维数组中最大元素的值,并将此值返回调用函数. 2 .温馨提示 C语言试题汇总里可用于计算机二级C语言笔试.机试.研究生复试中 ...
- 动态数组,数组初始化,数组内存释放,向数组中添加一个元素,向数组中添加多个元素,数组打印,顺序查找,二分查找,查找数组并返回地址,冒泡排序,改变数组中某个元素的值,删除一个数值,删除所有,查找含有
1定义接口: Num.h #ifndef_NUM_H_ #define_NUM_H_ #include<stdio.h> #include<stdlib.h> /**** ...
- 删除数组中指定元素_如何删除PHP数组元素键值并重新排序
点击蓝字关注我们!每天获取最新的编程小知识! 源 / php中文网 源 / www.php.cn 想要删除PHP数组中某个元素键值,然后重新规范索引排序.我们可以使用PHP中的内置函数uns ...
- 动态二维数组外圈元素值的和_C语言 | 用指向元素的指针变量输出二维数组元素的值...
例33:有一个3*4的二维数组,要求用C语言实现指向元素的指针变量输出二维数组个元素的值. 解题思路:二维数组的元素时整型的,它相当于整型变量,可以用int*型指针变量指向它.二维数组的元素在内存中是 ...
- php怎么截取数组最后元素,PHP如何获取数组最后一个元素的键和值?(图文+视频)...
在PHP面试题中经常会出现关于PHP数组的基础操作知识点,比如PHP删除数组中重复元 素,php数组转 换为字符串等等基础题. 本篇文章再给大家介绍关于PHP数组的一个常见面试题,PHP获取数组最后一 ...
- php 未定义数组索引_如何删除PHP数组元素键值并重新排序
点击蓝字关注我们!每天获取最新的编程小知识! 源 / php中文网 源 / www.php.cn 想要删除PHP数组中某个元素键值,然后重新规范索引排序.我们可以使用PHP中的内置函数uns ...
- php如何根据条件删除二维数组中的元素
需求是在一个二维数组中,根据数组中某个元素的值是否为0来判断是否将这个元素删除 $result = array();foreach ( $data as $i => $v ) { $id = $ ...
- 如何给数组中的元素赋值?
如果把单个变量看成是"游兵散勇"的话,那么数组对应的是"集团".集团的"兵"就是我们前面说的数组的元素.这些"兵"不再有 ...
- 数组用法以及引用类型和值类型
1. 数组的特点: a. 可以存储多个数据. b. 存储的这多个数据的类型必须是相同的. 在声明的时候指定元素的类型. c. 数组的长度是固定的, 在声明的时候要求必须指定数组的长度,一旦指定 ...
最新文章
- php 字符 hash_php常用hash加密函数
- mysql 获取 row的id_转: MYSQL获取更新行的主键ID
- java中super()_Java 泛型中 extends 和 super 的区别是什么?
- 计算机辅助教学导学设计研究,《计算机辅助教学》实验报告
- Android Zygote分析
- Java的ClassLoader
- APL平台对C++开发者的价值和作用
- 【文摘】 雪念——作者:蓝色妖姬
- onvif device manager 找不到ipc_Qt音视频开发32-Onvif网络设置
- python机器学习库xgboost——xgboost算法
- 由一段JS代码引发的思考
- 单片机C语言控制16*16LED显示屏,基于单片机的pwm控制16*16led点阵亮度调节怎么做啊,...
- 基于SSM框架的电影订票系统
- 思维方式-《策略思维》书中的精髓:生活工作中博弈无处不在,理解博弈论、善用策略思维,能帮助我们做出更好的决策。
- Mysql从入门到入魔——8. 视图、存储过程、事务处理
- 节点是什么意思?什么是节点?
- uIP TCP/IP协议栈在51系列单片机上的应用
- linux概述及环境搭建
- 公众号快速注册并认证小程序功能介绍
- JetBrains Mikhail Vink:助开发者Keep Evolving
热门文章
- vat可以退税吗_【涨知识】企业对外投资可以申请出口退税吗?
- spring注解方式 idea报could not autowire
- Android 关于“NetworkOnMainThreadException”
- Jboss/Wildfly安装配置
- 控制uibutton的title范围
- HDU 4405 Aeroplane chess(期望DP)
- 极有收藏价值的一组难求纯4位数字.com域名 #8847#含义你懂的。 http://t.cn/ae9CTd
- VS2005 VSTO 项目创建
- 逻辑漏洞-token绕过
- PHP-代码审计-SQL注入