Leetcode 55 跳跃游戏

题意理解:

非负整数数组 nums,

最初位于数组的 第一个下标 。

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

需要跳到nums最后一个元素即为成功。

目标:是否能够跳到最后一个元素。

解题思路:

使用贪心算法来解题,需要理解局部解和最优解的关系。

这里引入一个覆盖区间的概念,覆盖区间表示所有可达的位置。

覆盖区间覆盖到最后一个元素时,即为最后一个位置可达。

局部最最优解:当前位置尽可能到达足够远的位置,逐步探索可到达的最远位置能否覆盖到最后一个元素。

结束的位置是能探索到的最远位置。

例1:最开始的最远距离是nums2, 在0,2之间探索,最远到达nums4,即能到达最远的位置。

1.贪心解题

我们用一个cover表示最远可到达的位置。cover随着探索会不断往后移,直到最远可达位置。

注意: i+numsi表达当前可达的最远位置的下标。

java 复制代码
public boolean canJump(int[] nums) {
        if(nums.length==1) return true;//一个位置一定可达
        int cover=0;
        for(int i=0;i<=cover;i++){
            //i+nums[i]表示当前位置可达的最远距离的坐标
            cover=Math.max(cover,i+nums[i]);
            //最后一个位置是否可达
            if(cover>=nums.length-1) return true;
        }
        return false;
    }

2.分析

时间复杂度:O(n)

空间复杂度:O(n)

n表示输入数组的长度。

相关推荐
Fuyo_11195 分钟前
C++ AVL树保姆级详解:从平衡因子到四大旋转机制
java·c++·算法
jktantan26 分钟前
每个节点 41 字节:把一棵百万节点树拆进 14 个 typed array
前端·javascript·vue.js·算法·typescript
揽星河..1 小时前
【C语言】猜数字游戏
c语言·算法·游戏
LabVIEW开发1 小时前
CTM-3 红外测温仪 + LabVIEW 温度怎么测?
算法·labview·测试·labview程序
纪念 2292 小时前
C++算法(六)
开发语言·c++·算法
Dumbness3 小时前
UIA 读微信群消息没有 id,怎么判断哪条是新的:后缀对齐在翻历史和撤回时整屏重报
python·算法
taka3 小时前
从 24x 到 141x:我用纯 Python 零依赖项目,扒开了 GPU 加速的性能黑洞
算法
UIU1143 小时前
P16237 [蓝桥杯 2026 省 B] 应急布线
数据结构·c++·算法·蓝桥杯
旖旎夜光3 小时前
LeetCode 315: 算右侧小于当前元素的个数(归并排序) —— 题解
c++·学习·算法·leetcode·排序算法
像风一样自由20203 小时前
2.如何用FastAPI把一个Python算法封装成HTTP服务
python·算法·fastapi