LeetCode算法题之55. Jump Game(medium)【Python3题解】

本文深入探讨Jump Game算法问题,通过分析数组中每个元素代表的最大跳跃长度,提出了一种从后向前检查是否能到达终点的有效策略。通过实例说明了如何避免超时错误,并给出了解决方案的Python代码实现。

开发板推荐:天空星STM32F407VET6开发板

超高性价比 STM32主控 | 超高主频 | 一板兼容百芯 | 比赛神器 | 沉金彩色丝印

题目描述:
Given an array of non-negative integers, you are initially positioned at the first index of the array.

Each element in the array represents your maximum jump length at that position.

Determine if you are able to reach the last index.

Example 1:

Input: nums = [2,3,1,1,4]
Output: true
Explanation: Jump 1 step from index 0 to 1, then 3 steps to the last index.

Example 2:

Input: nums = [3,2,1,0,4]
Output: false
Explanation: You will always arrive at index 3 no matter what. Its maximum jump length is 0, which makes it impossible to reach the last index.

Constraints:

1 <= nums.length <= 3 * 10^4
0 <= nums[i][j] <= 10^5

题目大意:

  • 给定你一个非负的数组,里面的数值代表着你所能跳的最大步数
  • 假定你在第一个元素的位置,问你在给定的数组的基础上,能否跳到最后一个元素

解题思路:

  • 其实本人最开始想到的是,就是将所有的可能情况都列出来,查看哪一种可能会到达最后一个元素,返回True即可,其余False,用递归写法,即可完成想法
  • 亲测,Time Limit Exceeded
  • 再想想,什么叫做能跳到最后一个元素呢?如果你第一个元素的数值比你整个数组的长度都要大,那一定能跳到啊
  • 也就是基于以上的想法,再加上网站中有官方题解
  • 其实简单的办法就是,先定义一个变量,用来记录能跳到哪的索引值,初始设置为最后一个元素即可,因为最后一个本身肯定能到达本身
  • 然后,重点是从后向前开始循环
  • 一次判断,最后一个数的前一个数,是不是能跳到最后一个数,如果能,就把那个记录索引的变量值,更新成最后一个数的前一个数
  • 如此下去,只要循环结束时,那个变量的值为0,也就是第一个位置可以跳到最后一个,返回True,其余False

少废话,上代码:

class Solution:
    def canJump(self, nums):
        # 设置一个变量,初始代表着最后一个数的索引,因为最后一个肯定能跳到自己
        # 从最后往前推,当前面的数可以跳到最后一个数的时候
        # 就将idx_True赋值为那个数的索引
        # 如果推到第一个数,仍然可以跳过去
        # 那么变量的值就为0
        idx_True = len(nums)-1
        # 从后往前推,索引倒着走
        for i in range(len(nums)-2, -1, -1):
            # 意为此时的数的索引,如果加上数值
            # 也就是能跳跃的最大步数,能比当前的idx_True大,或者等于
            # 也即代表能跳到这
            if nums[i] + i >= idx_True:
                idx_True = i # 就将这个索引值更新

        return idx_True == 0 # 最后确认是否为0

运行时间和内存占用:

  • Runtime: 88 ms, faster than 78.07% of Python3 online submissions for Jump Game.
  • Memory Usage: 15.8 MB, less than 7.14% of Python3 online submissions for Jump Game.

开发板推荐:天空星STM32F407VET6开发板

超高性价比 STM32主控 | 超高主频 | 一板兼容百芯 | 比赛神器 | 沉金彩色丝印

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值