• 算法通关村17关 | 透析跳跃游戏


    1. 跳跃游戏

    题目

            LeetCode55 给定一个非负整数数组,最初位于数组的第一个位置,数组中的每个元素代表你再该位置可以跳跃的最大长度,判断你是否能够达到最后一个位置。

    思路

            如果当前位置元素如果是3,我们无需考虑是跳几步,关键是判断能否达到终点,以及当前步数所能覆盖的最远距离每次遍历更新覆盖的最远位置,只要满足 i 小于覆盖的最远距离,就满足要求,一直遍历,如果循环结束没有遍历完,就返回false。

    针对上图:

    1. 在第二张图中,第一个元素,nums[0] = 2,此时conver = 2能覆盖到{3,1}两个元素,就可以边遍历边更新conver的最大值。
    2. 继续遍历,第二个元素nums[1] = 3,此时覆盖范围更新cover=4.{1,1,4}三个位置。
    3. 继续遍历nums[2] = 1,cover=2,Math.max(4,2) = 4,此时conver > nums.length - 1。

    代码

    1. public boolean canJump(int[] nums){
    2. if (nums.length == 1){
    3. return true;
    4. }
    5. //初始覆盖范围是0
    6. int conver = 0;
    7. //在覆盖范围内更新最大的覆盖范围
    8. for (int i = 0; i <= conver; i++) {
    9. conver = Math.max(conver, i + nums[i]);
    10. if (conver >= nums.length - 1){
    11. return true;
    12. }
    13. }
    14. return false;
    15. }

    2. 最短跳跃游戏

    题目

            在上题的基础上,假设一定能到达表尾,求最少要达到的步数,LeetCode45有三种走法,

    {2,3,4},{2,1,1,4},{2,3,1,1,4}。

    思路

    需要用到四个指针:

    • left用来一步步遍历数组
    • steps用来记录到达当前位置的最少步数,
    • right表示当前步数下能够覆盖到的最大范围。
    • 我们还需要一个临时变量conver,加入left到达right时才能更新right

            在这个图中,开始的元素是2,如果只走一步,step=1,可跳的范围是{3,1}。也就是如果只走一步,最远只能到达1,此时conver=nums[0] = 2,因此我们用right=nums[2]来保存这个位置,这表示的就是走一步最远只能到nums[2]。

            每次更新最大覆盖范围,当left指针和right指针重合的时候代表,这步走完,也就是left=1的时候,第一步走完,更新step=2,根据覆盖范围大小重新定位right。

    第二步,right表示当前步数最大能到的位置,第二步最大到的位置是3,继续边遍历边更新最大覆盖,当left=right的时候上一步走完,更新right位置

    right指针>=数组长度的时候,代表走完,

    简单总结来说就是,遍历记录,每次覆盖范围最大到的位置,当left和right重合的时候更新步数,保证每次都是走的最大步数

    代码

    1. public int jump(int[] nums){
    2. int right = 0;
    3. int maxPosition = 0;
    4. int steps = 0;
    5. for (int left = 0; left < nums.length; left++) {
    6. //找最远的跳
    7. maxPosition = Math.max(maxPosition,nums[left] + left);
    8. if (left == right){//最大步数走完,更新下次步数
    9. right = maxPosition;
    10. steps++;
    11. }
    12. //到达尾部
    13. if (right >= nums.length - 1){
    14. return steps;
    15. }
    16. }
    17. return steps;
    18. }

  • 相关阅读:
    当面试官问出“Unsafe”类时,我就知道这场面试废了,祖坟都能给你问出来!
    Java --- JVM虚拟机栈
    JUC-不得不说的Java“锁”事
    新兴网络安全威胁:数字防御新格局
    面向对象编程在Perl中的实现:解锁Perl的OOP潜力
    计算机毕业设计ssm计算机类图书管理系统ln698系统+程序+源码+lw+远程部署
    sqqyw(淡然点图标系统)漏洞复现和74cms漏洞复现
    论文解读(DAGNN)《Towards Deeper Graph Neural Networks》
    利用pgsql插件PostGIS 实现地理坐标系数据转换
    Replicate + ngrok云端大模型API实现教程
  • 原文地址:https://blog.csdn.net/m0_54138535/article/details/132751998