面试经典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;
}

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

相关推荐
方圆想当图灵5 分钟前
缓存之美:万文详解 Caffeine 实现原理(下)
java·redis·缓存
old_power17 分钟前
【PCL】Segmentation 模块—— 基于图割算法的点云分割(Min-Cut Based Segmentation)
c++·算法·计算机视觉·3d
栗豆包20 分钟前
w175基于springboot的图书管理系统的设计与实现
java·spring boot·后端·spring·tomcat
Bran_Liu31 分钟前
【LeetCode 刷题】字符串-字符串匹配(KMP)
python·算法·leetcode
涛ing34 分钟前
21. C语言 `typedef`:类型重命名
linux·c语言·开发语言·c++·vscode·算法·visual studio
Thomas_YXQ1 小时前
Unity3D项目开发中的资源加密详解
游戏·3d·unity·unity3d·游戏开发
等一场春雨1 小时前
Java设计模式 十四 行为型模式 (Behavioral Patterns)
java·开发语言·设计模式
windwind20001 小时前
游戏为什么失败?回顾某平庸游戏
游戏·玩游戏·游戏策划
Again_acme1 小时前
20250118面试鸭特训营第26天
服务器·面试·php
Jcqsunny1 小时前
[分治] FBI树
算法·深度优先··分治