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表示输入数组的长度。

相关推荐
毕竟是shy哥2 小时前
计算YOLO数据集中每个类的目标数
算法·yolo·机器学习
M78佐菲3 小时前
Linux学习笔记:TCP协议
linux·笔记·学习·tcp/ip·算法
圣保罗的大教堂3 小时前
leetcode 1406. 石子游戏 III 困难
leetcode
晊晌_h4 小时前
嵌入式从0到精通——数据结构总结[特殊字符]
数据结构·算法·排序算法
我找到地球的支点啦4 小时前
Matlab系列(009) 一CRC循环冗余校验详解
开发语言·数据结构·算法·matlab·信息与通信
罗西的思考5 小时前
【OpenClaw具身硬件】ZeroClaw 源码阅读笔记(3)--- RAG
人工智能·算法·机器学习
浪里镖客6 小时前
位姿转换矩阵写法-个人习惯(计算机理解其实是相反的)
线性代数·算法·矩阵
小白羊丨9 小时前
如何诊断 Prompt 模板导致的效果下降?
人工智能·算法·prompt
OPEN-F10 小时前
C++11/14新特性精讲:移动语义与智能指针实战
开发语言·c++·算法
lisin-lee-cooper10 小时前
【leetcode658】有序数组找出k个最接近x的数
java·数据结构·算法