博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
45. 跳跃游戏 II
阅读量:4262 次
发布时间:2019-05-26

本文共 1210 字,大约阅读时间需要 4 分钟。

题目描述:

给定一个非负整数数组,你最初位于数组的第一个位置。

数组中的每个元素代表你在该位置可以跳跃的最大长度。
你的目标是使用最少的跳跃次数到达数组的最后一个位置。

示例:

输入: [2,3,1,1,4]输出: 2解释: 跳到最后一个位置的最小跳跃数是 2。     从下标为 0 跳到下标为 1 的位置,跳 1 步,然后跳 3 步到达数组的最后一个位置。

说明:

假设你总是可以到达数组的最后一个位置。

解题思路:

1)、首先是可以看出每次是寻找i == midMax范围内最大的可以扩展到的位置,

2)、midMax更新为每个节点i == midMax最大扩展到的位置;
3)、跳到下一个midMaxret++,直到 midMax + 1 >= nums.size() , + 1是因为 i是从0开始的;

例子:

nums = [2,3,1,1,4]

1)、midMax = 0ret = 0

i = 0tmp = 0 + nums[0] = 2;
2)、miMax = 0; i == miMaxmiMax = tmp = 2ret = 1 ;
i = 1tmp = max(1 + nums[1], tmp) = 4;
i = 2tmp = max(2 + nums[2], tmp) = max(3, 4) = 4;
3)、 miMax = 2; i == miMaxmiMax = tmp = 4ret = 2 ;
又因为if(miMax + 1 = nums.size()) 所以:break ;

代码实现:

class Solution {
public: int jump(vector
& nums) {
int ret = 0 ,midMax = 0 , tmp = 0 , i ; for (i = 0 ; i < nums.size() ; i ++) {
//tmp:记录当前位置可以跳到的最大位置; tmp = max(tmp , i + nums[i]) ;//更新 midMax ; 跳到下一个 midMax 故 ret ++ ; if (i == midMax) {
if (midMax + 1 >= nums.size()) break ; ret ++ ; midMax = tmp ; } } return ret ; }};

复杂度计算:

时间复杂度:O(n)

空间复杂度:O(1)

转载地址:http://xraei.baihongyu.com/

你可能感兴趣的文章
痛与教训,我所亲历的3个失败游戏创业公司
查看>>
优化模式--数据局部性
查看>>
程序猿,你也配吃10元的盒饭?
查看>>
一个简单地聊天程序
查看>>
优化模式--脏标记模式
查看>>
数据分析团队正成为手游公司的标配,但我为什么说解散他
查看>>
2017年最新App Store审核指南(官方)
查看>>
如何向App Store提交应用
查看>>
Cocos2dx--纹理使用
查看>>
中国游戏的未来在哪里 - 游戏行业20年历史观察及趋势分析
查看>>
许怡然:网游创业失败全攻略
查看>>
OpenGL--GLSL基础
查看>>
c++服务器protobuf使用
查看>>
c++服务器websocket支持
查看>>
OpenGL--使用Shader
查看>>
Cocos2dx--使用Shader
查看>>
pomelo架构概览
查看>>
HTML 速查列表
查看>>
pomelo风格及惯例约定
查看>>
框架分析--框架的类关系图
查看>>