跳跃游戏 | 贪心算法最优解(LeetCode经典题)

跳跃游戏 | 贪心算法最优解(LeetCode经典题)

题目描述

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

核心特征分析

  1. 处理对象为数组类问题,这类问题通常可优先考虑动态规划或贪心算法解决;
  2. 题目中"每个位置的元素代表能跳跃的最大长度"是贪心算法的典型应用特征------无需关注具体跳跃路径,只需聚焦"能到达的最远范围"即可验证可行性。

算法选择与思路

算法选择

本题仅需验证"能否到达最后一个下标"的可行性,无需罗列具体跳跃路径,因此选择贪心算法是最优解(相比动态规划,贪心算法时间复杂度相同且空间复杂度更低)。

贪心算法核心思路

  1. 维护变量 max_length,表示当前能到达的最大索引位置;
  2. 遍历数组中的每个索引 i:
    • 若当前索引 i 超过 max_length,说明无法到达该位置,直接返回 false;
    • 更新 max_length 为 max(max_length, i + nums[i])(当前能到达的最远位置 = 历史最远位置 和 当前位置可跳最远位置 的较大值);
    • 若 max_length 已≥数组最后一个索引,说明能到达终点,直接返回 true;
  3. 遍历结束后,兜底判断 max_length 是否≥数组最后一个索引(适配数组长度为1等边界场景)。

完整解题代码

cpp 复制代码
class Solution {
public:
    bool canJump(vector<int>& nums) {
        int n = nums.size();
        int max_length = 0;
        for(int i = 0; i < n; i++){
            if(i > max_length) return false;
            max_length = max(max_length, i + nums[i]);
            if(max_length >= n - 1) return true;
        }
        return max_length >= n - 1;
    }
};

复杂度分析

  • 时间复杂度 :O(n)。仅需遍历一次数组,n 为数组长度;
  • 空间复杂度 :O(1)。仅使用常数级额外空间(max_length、n、i 三个变量)。

总结

  1. 跳跃游戏可行性验证的核心是维护"能到达的最远索引",贪心算法是该问题的最优解法;
  2. 遍历中提前终止判断(无法到达当前索引/已确认能到终点时直接返回),可提升实际执行效率;
  3. 该解法时间复杂度 O(n)、空间复杂度 O(1),是本题的最优解。
相关推荐
Hello.Reader9 小时前
一个开源项目,让 AI 做逆向不再靠猜reverse-skill 架构解析与本地实战
人工智能·架构·开源
wespaul9 小时前
VeapAI 自然语言操作实战|第 05 篇:向量与召回——从知识条目到可检索资产
大数据·数据库·人工智能·milvus
mingbaiceping10 小时前
复旦-华盛顿大学EMBA:2026年AI课程矩阵解析
人工智能
蹊黎10 小时前
C++中vector类的部分简单实现
开发语言·c++·visual studio
李福春10 小时前
技术思考问题17:上了LangChain框架就等于AI-Agent工程化吗?
大数据·人工智能·langchain·深圳同盟·腾讯云架构师技术同盟·llm应用架构·编排抽象
qq_2842740510 小时前
机械设计基础·滚动轴承全解(类型·代号·选型·寿命)+轮系与蜗杆蜗轮传动
笔记·学习·自动化·制造
揽秀亭长10 小时前
AIGC 检测原理拆解与论文降 AI 率的可复现处理流程(2026版)
人工智能·aigc
羞儿10 小时前
【DSH】为什么需要-Harness
人工智能·大模型·harness·认知构建
JackLam12 小时前
AI-安装ChatGpt Codex
人工智能
强哥聊算力12 小时前
《算力江湖·英伟达传奇》第七集:ChatGPT出现前夜,英伟达发生了什么?
服务器·人工智能·算法·ai·chatgpt·gpu算力