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

面试经典150题 day9

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

题目来源

力扣每日一题;题序:55

我的题解

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

使用一个dp表记录i位置是否可达,然后在判断是否可达时需要看前面的numsj+j>=i&&dpj
时间复杂度 :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;
}

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

相关推荐
kukubuzai2 分钟前
双指针系列二--末尾篇(3道题)
c++·算法·leetcode
2401_832298103 分钟前
人工智能:重塑时代发展的核心科技力量
职场和发展
她的男孩3 分钟前
数据库改了配置,说好的 30 秒自动刷新根本没跑:那条 @Scheduled 是注释状态
java·后端·架构
君顾111 分钟前
西安24小时自助健身房系统软件开发实战:需求分析与技术落地指南
java·开发语言·健身房
杜 硕15 分钟前
单链表经典算法题
数据结构·算法
starzy199040 分钟前
Flink Session Window 详解及代码实现:从用户会话切割到窗口合并机制
java·flink
小O的算法实验室1 小时前
IEEE TCYB,着色旅行商问题:模型、求解与应用
算法
h_a_o777oah1 小时前
【图论】网络流:Dinic 算法模板实现原理及解题技巧
c++·算法·图论·acm·网络流·最小割·dinic算法
June bug1 小时前
【HCIA- AI(正课)】4.1 华为智算方案
职场和发展