45.跳跃游戏II

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

数组中的每个元素代表你在该位置可以跳跃的最大长度。

你的目标是使用最少的跳跃次数到达数组的最后一个位置。

示例:

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

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

思路
记录在n步能走的最远距离maxpos,当超越最远距离则,n=n+1,依此循环即可求解,具体代码如上,下面讲一下具体逻辑

(1)step记录步数

(2)lastpos记录step步数时,能走的最远距离

(3)maxpos记录当前位置i能走的最远距离,为原maxpos和i+nums[i]的最大值

(4)当位置i超越step能走的lastpos距离时,则需要增加一步step+=1,并更新此步能走的最远距离lastpos=maxpos

#include <vector>
#include <algorithm>
using namespace std;
class Solution {
public:
    int jump(vector<int>& nums) {
        int step = 0, lastPos = 0, maxPos = 0;
        for (int i = 0; i < nums.size(); i++)
        {
            if (i > lastPos)
            {
                lastPos = maxPos;
                step += 1;
            }
            maxPos = max(maxPos, i + nums[i]);
        }
        return step;
    }
};

int main(int argc, char* argv[])
{
    vector<int> test = { 2,3,1,1,4 };
    auto res = Solution().jump(test);
    return 0;
}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 链接:https://leetcode-cn.com/problems/jump-game-ii/descript...
    aniegai阅读 6,225评论 0 2
  • 给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。你的目标是使用...
    vbuer阅读 1,456评论 1 1
  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 14,348评论 0 33
  • 原文地址:http://theory.stanford.edu/~amitp/GameProgramming/ 1...
    达微阅读 19,783评论 0 28
  • 嗨,大家好!小韩又来写感想了,废话不多说,文字来也^O^。 今早第三节课,杨老师为我们上了本学期的第二堂心育课,首...
    韩HY雨阅读 1,469评论 0 3