• [LeetCode]Jump GameII


    题目:Jump GameII

    如果要求找最小的调数,考虑扩张的思路。

    思路如下:

    1.首先找起始位能到达的范围是否覆盖了最终位置,并记录下搜索中的最远能到达的位置值,即max{nums[i] + i};

    2.如果无法到达最终位置,则跳数加一,并从上一次搜索的最后位置开始,向后搜索到上一次记录的最大值所在的位置。

    3.重复上面两步,直到找到最终跳数。

    注意:

    当数组元素只有1个时,跳数是0;

    跳数的初值应该是1。

    int jump(vector<int>& nums){
        if (nums.size() < 2)return 0;//数组长度小于2
        int start = 0, next = nums.at(0),end = nums.size() - 1;
        int jump = 1,cur = next;//jump记录跳数,cur记录当前的最大范围
        while (cur < end){
            jump++;
            for (int i = start + 1; i <= next; i++)
            {
                if (nums.at(i) + i >= end)return jump;
                else if (nums.at(i) + i > cur)cur = nums.at(i) + i;
            }
            start = next;//start是搜索的开始位置
            next = cur;//next是搜索的结束位置
        }
        return jump;
    }
  • 相关阅读:
    Linux Shell 用法
    gdb调试用法
    grep 用法总结
    Cmake用法
    Win64/Linux 上PyMouse安装
    两道拓扑排序的问题
    hiho一下第76周《Suzhou Adventure》
    这类问题需要利用二进制的特殊性
    这种题应该诸位处理
    两道人数多,课程少,query多的题
  • 原文地址:https://www.cnblogs.com/yeqluofwupheng/p/6755622.html
Copyright © 2020-2023  润新知