LeetCode第55题跳跃游戏

继续打卡算法题,今天学习的是LeetCode第55题跳跃游戏,这道题目是道中等题。算法题的一些解题思路和技巧真的非常巧妙,每天看一看算法题和解题思路,我相信对我们的编码思维和编码能力有一些提升。

分析一波题目

之前做过了第45题跳跃游戏II 本题其实更简单,第45题是一定可以跳跃到最后一个位置,求最少跳跃到末尾位置的次数,而本题是不一定可以跳跃到末尾位置。

我们只要把当前时刻可以到达的最大位置保存下来,每次判断当前位置是否可以到达,或者当前位置是否可以到达最后的位置。 这个思路就是先求局部最优的解,然后根据局部最优的解可以推导出全局最优解。

[2,3,1,1,4] 为例子

第1次遍历到位置1,此刻最大可以到达下标(0+2)=2

第2次遍历到位置2,此刻位置可以到达,且当前位置可以最大可以到达下标(1+3)=4的位置,

第3次遍历到位置3,此刻位置可以到达,且当前位置可以到达的下标(2+1)=3位置,这个时候发现,前面位置可以到达的位置更远

第4次遍历到位置4,此刻位置可以到达,且当前位置可以到达下标(1+3)位置,此刻发现已经到达了末尾位置

本题解题技巧

本题巧妙的地方就在于把当前位置最大可以到的下标记录下来,

注意我们不要纠结当前位置该跳跃几步,而是判断当前位置是否可以到达,并且当前位置可以继续往前跳。如果这两个条件都满足,我们就一直往前跳,直到到达末尾位置。

编码解决

java 复制代码
class Solution {
    public boolean canJump(int[] nums) {
      // write code here
      int reach = 0; // 目前最远能跳到的点
      for (int i = 0; i < nums.length; i++) {
        // 之前的点都跳不到当前的点,所以失败
        if (reach < i) return false;
        // 已经能跳到最后一个点了,直接返回
        if (reach >= nums.length-1) return true;
        // 如果通过当前的点能够到更远的点,更新reach
        reach = Math.max(reach, i + nums[i]);
      }
        
      return true;
    
    }
}

总结

相比第45题跳跃游戏II, 本题更好理解,我们只要想到判断每个位置是否可以继续往下跳的思路,就可以解决此题。

相关推荐
武子康8 分钟前
大数据-183 Elasticsearch - 并发冲突与乐观锁、分布式数据一致性剖析
大数据·后端·elasticsearch
木头左13 分钟前
自适应门限动态调整算法在量化交易策略中的应用
算法
deepdata_cn14 分钟前
非线性规划(NLP)算法
算法
TL滕23 分钟前
从0开始学算法——第十五天(滑动窗口)
笔记·学习·算法
@小码农23 分钟前
2025年全国青少年信息素养大赛 Gandi编程 小低组初赛真题
数据结构·人工智能·算法·蓝桥杯
CoderYanger24 分钟前
贪心算法:7.最长连续递增序列
java·算法·leetcode·贪心算法·1024程序员节
期待のcode25 分钟前
MyBatis-Plus的Wrapper核心体系
java·数据库·spring boot·后端·mybatis
鹿角片ljp37 分钟前
力扣104.求二叉树最大深度:递归和迭代
算法·leetcode·二叉树·递归
天天进步201537 分钟前
Linux 实战:如何像查看文件一样“实时监控” System V 共享内存?
开发语言·c++·算法
菜鸟‍38 分钟前
【论文学习】Co-Seg:互提示引导的组织与细胞核分割协同学习
人工智能·学习·算法