面试经典150题——跳跃游戏

面试经典150题 day9

      • 题目来源
      • 我的题解
        • [方法一 动态规划+双重循环](#方法一 动态规划+双重循环)
        • [方法二 贪心](#方法二 贪心)

题目来源

力扣每日一题;题序:55

我的题解

方法一 动态规划+双重循环

使用一个dp表记录i位置是否可达,然后在判断是否可达时需要看前面的nums[j]+j>=i&&dp[j]。
时间复杂度 :O( n 2 n^2 n2)
空间复杂度:O(n)

java 复制代码
public boolean canJump(int[] nums) {
    int n=nums.length;
    boolean[] dp=new boolean[n];
    dp[0]=true;
    for(int i=1;i<n;i++){
        for(int j=0;j<i;j++){
            if(nums[j]+j>=i&&dp[j])
                dp[i]=true;
        }
    }
    return dp[n-1];
}
方法二 贪心

记录当前能够达到的最大位置,若能达到的最大位置小于当前位置,则返回false;若能达到的最大位置大于等于n-1,则返回true,其他情况返回false。
时间复杂度:O(n)

空间复杂度:O(1)

java 复制代码
public boolean canJump(int[] nums) {
    int n=nums.length;
    int maxIndex=0;
    for(int i=0;i<n;i++){
        if(maxIndex<i)
            return false;
        maxIndex=Math.max(maxIndex,nums[i]+i);
        if(maxIndex>=n-1)
            return true;
    }
    return false;
}

有任何问题,欢迎评论区交流,欢迎评论区提供其它解题思路(代码),也可以点个赞支持一下作者哈😄~

相关推荐
RickeyBoy4 小时前
SwiftUI 如何实现 Infinite Scroll?
ios·面试
xiaoye37084 小时前
Java 自动装箱 / 拆箱 原理详解
java·开发语言
YDS8295 小时前
黑马点评 —— 分布式锁详解加源码剖析
java·spring boot·redis·分布式
迷藏4946 小时前
**发散创新:基于 Rust的开源权限管理系统设计与实战**在现代软件架构中,**权限控制**早已不
java·开发语言·rust·开源
升鲜宝供应链及收银系统源代码服务6 小时前
《IntelliJ + Claude Code + Gemini + ChatGPT 实战配置手册升鲜宝》
java·前端·数据库·chatgpt·供应链系统·生鲜配送
daidaidaiyu6 小时前
Nacos实例一则及其源码环境搭建
java·spring
lvxiangyu116 小时前
MPPI 算法证明重构:基于无穷维泛函变分与 KL 散度的构造性推导
算法·重构·最优控制·随机最优控制
2301_818419016 小时前
C++中的解释器模式变体
开发语言·c++·算法
小江的记录本6 小时前
【Redis】Redis全方位知识体系(附《Redis常用命令速查表(完整版)》)
java·数据库·redis·后端·python·spring·缓存
ab1515176 小时前
3.25完成*23、*24、*28、*30、*33、*38、*39、*40
算法