45 jump-game-ii

这道题目和以前一道能不能跳到最后一点的题目有比较类似的思路,但是要稍微难一点,因为要求出最小的跳数。

题目的大体意思是这样的,给定一个一维数组,数组中每一位上的数字表示从该位置能向后一跳的最远距离是多少(之所以说最远是可以在0~最远值之间任意选择一个合适的数值),问到达最后一个位置所经历的最小跳数。这种题目基本上穷举是肯定不行的,因此,要有一些小的处理技巧。另外,值得注意的是,这道题给出的所有测试用例没有不能到达的情况。

要知道哪种方案跳数最低,在未能到达最后一个位置之前,必须要对所有点进行遍历,来查看所有可能的情况,从而选择最优。

从出发位置开始,设置一个变量每次循环都记录从该位置能到达的最远位置是多少,该变量用来表示我们下一次循环都有哪些新的点可以遍历到,然后继续往后遍历,直到到达最后一点为止。

理论讲起来比较费解,但是代码很简单,只要55题做了,这道题不难理解

class Solution {
public:
    int jump(vector<int>& nums) {
        int minstep = 0;
        int cur = 0, i = 0, maxsize = 0;
        while (cur < nums.size()-1) {
            ++minstep;
            maxsize = cur;
            for (; i<=maxsize; ++i) {
                cur = max(cur, i+nums[i]);
            }
        }
        return minstep;
    }
};

猜你喜欢

转载自blog.csdn.net/qq_29592167/article/details/83153662