LeetCode[中等] 55.跳跃游戏

给你一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。

判断你是否能够到达最后一个下标,如果可以,返回 true ;否则,返回 false

思路 贪心算法

可达位置reach,只要存在一个位置nums[i],其本身可达,且它跳跃的最大长度 i+nums[i] >= reach,那么reach也可以到达。

cs 复制代码
public class Solution {
    public bool CanJump(int[] nums) {
        int reach = 0;
        for(int i = 0; i < nums.Length; i++)
        {
            if(i > reach)
                return false;
            reach = Math.Max(reach, i + nums[i]);
        }
        return true;
    }
}

复杂度分析

  • 时间复杂度:O(n),其中 n 是数组 nums 的长度。状态数是 O(n),每个状态的计算时间是 O(1),因此时间复杂度是 O(n)。

  • 空间复杂度:O(1)。

相关推荐
Liu628886 小时前
C++中的工厂模式高级应用
开发语言·c++·算法
AI科技星6 小时前
全尺度角速度统一:基于 v ≡ c 的纯推导与验证
c语言·开发语言·人工智能·opencv·算法·机器学习·数据挖掘
参.商.6 小时前
【Day41】143. 重排链表
leetcode·golang
条tiao条7 小时前
KMP 算法详解:告别暴力匹配,让字符串匹配 “永不回头”
开发语言·算法
干啥啥不行,秃头第一名7 小时前
C++20概念(Concepts)入门指南
开发语言·c++·算法
zzh940777 小时前
Gemini 3.1 Pro 硬核推理优化剖析:思维织锦、动态计算与国内实测
算法
2301_807367197 小时前
C++中的解释器模式变体
开发语言·c++·算法
愣头不青8 小时前
617.合并二叉树
java·算法
MIUMIUKK8 小时前
双指针三大例题
算法
灵感__idea8 小时前
Hello 算法:复杂问题的应对策略
前端·javascript·算法