当前位置:   article > 正文

C语言力扣第45题之跳跃游戏 II。遍历跳跃_力扣 跳格子

力扣 跳格子

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

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

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

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

示例 1:

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

    示例 2 :

    输入 : nums = [2, 3, 0, 1, 4]
    输出 : 2

    提示 :

    1 <= nums.length <= 104
    0 <= nums[i] <= 1000

  1. 如果某一个作为 起跳点 的格子可以跳跃的距离是 3,那么表示后面 3 个格子都可以作为 起跳点。可以对每一个能作为 起跳点 的格子都尝试跳一次,把 能跳到最远的距离 不断更新。
  2. 如果从这个 起跳点 起跳叫做第 1 次 跳跃,那么从后面 3 个格子起跳 都 可以叫做第 2 次 跳跃。
  3. 所以,当一次 跳跃 结束时,从下一个格子开始,到现在 能跳到最远的距离,都 是下一次 跳跃 的 起跳点。

        31. 对每一次 跳跃 用 for 循环来模拟。
        32. 跳完一次之后,更新下一次 起跳点 的范围。
        33. 在新的范围内跳,更新 能跳到最远的距离。

记录 跳跃 次数,如果跳到了终点,就得到了结果。

  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <stdio.h>
  3. #include <string.h>
  4. int jump(int* nums, int numsSize)
  5. {
  6. int end = 0, farthest = 0;
  7. int jumps = 0;
  8. int i = 0;
  9. for (i = 0; i < numsSize - 1; i++)
  10. {
  11. //判断当前最远可以到达的位置
  12. farthest = fmax(nums[i] + i, farthest);
  13. //更新边界并将跳跃次数增加 1。
  14. if (end == i)
  15. {
  16. jumps++;
  17. end = farthest;
  18. }
  19. }
  20. //返回跳跃的次数即可
  21. return jumps;
  22. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/506941
推荐阅读
相关标签
  

闽ICP备14008679号