跳跃游戏(力扣热题HOT100 之 力扣55)Java 贪心

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

一、题目描述



给定一个非负整数数组 nums ,你最初位于数组的 第一个下标 。

数组中的每个元素代表你在该位置可以跳跃的最大长度。

判断你是否能够到达最后一个下标。


示例 1:

输入:nums = [2,3,1,1,4]

输出:true

解释:可以先跳 1 步,从下标 0 到达下标 1, 然后再从下标 1 跳 3 步到达最后一个下标。


示例 2:

输入:nums = [3,2,1,0,4]

输出:false

解释:无论怎样,总会到达下标为 3 的位置。但该下标的最大跳跃长度是 0 , 所以永远不可能到达最后一个下标。


提示:

1 <= nums.length <= 3 * 10^4

0 <= nums[i] <= 10^5


二、思路讲解



遍历数组,判断当前节点是否可达(索引是否大于最远能到达的位置)。如果不可达, 则说明后面都到不了,直接返回false;如果可达,更新最远能到达的位置。如果最远能到达的位置大于最后一个索引,则返回true。遍历结束后仍没有结束,说明不可达,返回false。


三、java代码实现



class Solution {
    public boolean canJump(int[] nums) {
        int fur = nums[0];
        int len = nums.length;
        for(int i=0; i<len; i++){
            if(i<=fur){ //如果可以到达当前节点
                //更新最远可以到达的节点
                fur = Math.max(fur, (nums[i]+i));
            } else {    //如果不能到达当前节点
                //不能到达这里,说明不能到达最后
                return false;
            }
            //如果最远能到达最后
            if(fur>=(len-1)){
                return true;
            }
        }
        return false;
    }
}



四、时空复杂度分析



时间复杂度:        O(N)


空间复杂度:        O(1)





相关文章
|
15天前
|
前端开发 JavaScript Java
计算机Java项目|java游戏账号交易系统
计算机Java项目|java游戏账号交易系统
计算机Java项目|java游戏账号交易系统
|
12天前
|
算法 Java
[Java·算法·简单] LeetCode 283. 移动零
[Java·算法·简单] LeetCode 283. 移动零
17 2
|
15天前
|
前端开发 JavaScript Java
计算机Java项目|游戏美术外包管理信息系统
计算机Java项目|游戏美术外包管理信息系统
|
18天前
力扣-2029-石子游戏-‘屎山’代码
力扣-2029-石子游戏-‘屎山’代码
17 3
|
20天前
|
算法 数据挖掘 开发者
LeetCode题目55:跳跃游戏【python5种算法贪心/回溯/动态规划/优化贪心/索引哈希映射 详解】
LeetCode题目55:跳跃游戏【python5种算法贪心/回溯/动态规划/优化贪心/索引哈希映射 详解】
|
1天前
|
算法
力扣经典150题第三十八题:生命游戏
力扣经典150题第三十八题:生命游戏
4 0
|
5天前
|
Java
使用java编写猜数字游戏
使用java编写猜数字游戏
9 0
|
16天前
|
算法
【经典LeetCode算法题目专栏分类】【第9期】深度优先搜索DFS与并查集:括号生成、岛屿问题、扫雷游戏
【经典LeetCode算法题目专栏分类】【第9期】深度优先搜索DFS与并查集:括号生成、岛屿问题、扫雷游戏
|
16天前
|
算法 机器人
【经典LeetCode算法题目专栏分类】【第5期】贪心算法:分发饼干、跳跃游戏、模拟行走机器人
【经典LeetCode算法题目专栏分类】【第5期】贪心算法:分发饼干、跳跃游戏、模拟行走机器人
|
19天前
|
存储 算法 数据挖掘
力扣174题动态规划:地下城游戏(含模拟面试)
力扣174题动态规划:地下城游戏(含模拟面试)