leetcode 55 Jump Game 详细解答

leetcode 55 Jump Game 详细解答

在这里插入图片描述
解答1:
此题需要从后往前考虑,
需要初始化一个额外的数组dp,用以保存下标 i 是否能够到达数组nums最后的下标,如果能到达, dp[ i ] = True
如果不能到达,dp[ i ] = False
所以
示例1中的数组dp就是 [True, True, True, True]
示例2中的数组dp就是 [False, False, False, False, True]

如何判断下标 i 是否能到达数组nums最后的下标呢?
情况1:
如果 i + nums[i] >= len(nums)-1 则肯定能到达

情况2:
若下标 i 能到达的位置中, 即 i, i+1, …, i+nums[i],有可以到达数组nums最后下标的,说明也可以

最后的代码结果如下:

在这里插入图片描述但是这种方式的时间复杂度是O(N^2),空间复杂度是O(N),所以在leetcode提交会超时。


解答2:
优化:
从后向前考虑,是否能到达数组nums最后一个下标,是否能到达数组nums倒数第2个下标,是否能到达倒数第3个小标,…,是否能到达数组nums倒数第N个下标。
在这里初始化一个数组dp = [0] * N

代码如下
在这里插入图片描述
时间复杂度O(N),空间复杂度O(N)


解答3
由解答2得到,只需要定义一个下标 index, 跟踪可以到达数组nums最后一个下标的下标,所以在这只需要定义一个index即可,不需要dp数组。
代码如下:
在这里插入图片描述
时间复杂度O(N),空间复杂度O(1)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值