• 贪心算法|45.跳跃游戏II


    力扣题目链接

    1. class Solution {
    2. public:
    3. int jump(vector<int>& nums) {
    4. if (nums.size() == 1) return 0;
    5. int curDistance = 0; // 当前覆盖最远距离下标
    6. int ans = 0; // 记录走的最大步数
    7. int nextDistance = 0; // 下一步覆盖最远距离下标
    8. for (int i = 0; i < nums.size(); i++) {
    9. nextDistance = max(nums[i] + i, nextDistance); // 更新下一步覆盖最远距离下标
    10. if (i == curDistance) { // 遇到当前覆盖最远距离下标
    11. ans++; // 需要走下一步
    12. curDistance = nextDistance; // 更新当前覆盖最远距离下标(相当于加油了)
    13. if (nextDistance >= nums.size() - 1) break; // 当前覆盖最远距到达集合终点,不用做ans++操作了,直接结束
    14. }
    15. }
    16. return ans;
    17. }
    18. };

    这题难了一点,它求的是步数

    思路

    本题相对于55.跳跃游戏 (opens new window)还是难了不少。

    但思路是相似的,还是要看最大覆盖范围。

    本题要计算最少步数,那么就要想清楚什么时候步数才一定要加一呢?

    贪心的思路,局部最优:当前可移动距离尽可能多走,如果还没到终点,步数再加一。整体最优:一步尽可能多走,从而达到最少步数。

    思路虽然是这样,但在写代码的时候还不能真的能跳多远就跳多远,那样就不知道下一步最远能跳到哪里了。

    所以真正解题的时候,要从覆盖范围出发,不管怎么跳,覆盖范围内一定是可以跳到的,以最小的步数增加覆盖范围,覆盖范围一旦覆盖了终点,得到的就是最少步数!

    这里需要统计两个覆盖范围,当前这一步的最大覆盖和下一步最大覆盖

    如果移动下标达到了当前这一步的最大覆盖最远距离了,还没有到终点的话,那么就必须再走一步来增加覆盖范围,直到覆盖范围覆盖了终点。

    如图:

    45.跳跃游戏II

    图中覆盖范围的意义在于,只要红色的区域,最多两步一定可以到!(不用管具体怎么跳,反正一定可以跳到)

    #方法一

    从图中可以看出来,就是移动下标达到了当前覆盖的最远距离下标时,步数就要加一,来增加覆盖距离。最后的步数就是最少步数。

    这里还是有个特殊情况需要考虑,当移动下标达到了当前覆盖的最远距离下标时

    • 如果当前覆盖最远距离下标不是是集合终点,步数就加一,还需要继续走。
    • 如果当前覆盖最远距离下标就是是集合终点,步数不用加一,因为不能再往后走了。

    自己的思路

    本题的关键是求步数ans

    1. if (i == curDistance) { // 遇到当前覆盖最远距离下标
    2. ans++; // 需要走下一步
    3. curDistance = nextDistance; // 更新当前覆盖最远距离下标(相当于加油了)
    4. if (nextDistance >= nums.size() - 1) break; // 当前覆盖最远距到达集合终点,不用做ans++操作了,直接结束
    5. }

    这一步不太好理解

     不过代码还是好记的。

    这题需要明天再复习一下,自己独立敲出!

  • 相关阅读:
    NX二次开发-VS使用NXOpen向导创建项目失败,再次弹出创建向导对话框,解决办法
    Meta扩大漏洞赏金计划,报告「数据搜刮」首次纳入其中
    一个基于.Net Core遵循Clean Architecture原则开源架构
    反射的机制
    JS递归函数详解
    ImportError: cannot import name ‘TouchActions‘ from ‘selenium.webdriver‘
    [资源推荐]看到一篇关于agent的好文章
    基础算法篇——双指针算法
    C++ · sort排序函数讲解
    示例:WPF中推荐一个Diagram开源流程图控件
  • 原文地址:https://blog.csdn.net/Talking999/article/details/137436390