通过python,实现跳跃游戏,涉及贪心算法

文章讲述了如何通过遍历数组并利用贪心策略判断从起点出发是否能通过跳跃到达数组末尾。作者提供了一个Python类Solution,通过计算每一步的最大可达位置,最终确定是否能到达终点。时间复杂度为O(n),空间复杂度为O(1)。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

# 跳跃游戏。
# 题目描述:给定一个数组,每个元素代表跳跃的距离,判断是否能从起点出发,跳到数组的末尾。
# 例如,给定数组[2,3,1,1,4],表示从起点出发,可以跳跃2步,跳到位置3,然后跳1步,跳到位置4,跳4步到达末尾。

# 思路:
# 1. 遍历数组,对于每个位置,判断能否到达,如果能到达,则更新最远能到达位置。
# 2. 如果最远能到达位置大于等于数组长度-1,则说明可以到达末尾,返回True;否则返回False。
class Solution:
    def canJump(self, nums):
        max_distance = 0  # 用来记录当前能够到达的最远位置。
        for i, jump in enumerate(nums):  # 遍历数组nums,同时获取当前位置的索引i和该位置对应的跳跃长度jump
            # 如果当前位置超出了能够到达的最远位置,则无法继续跳跃
            if i > max_distance:
                return False
            # 更新当前能够到达的最远位置,这里的max函数的作用是返回两个参数中的较大值。
            max_distance = max(max_distance, i + jump)
            # 如果最远能够到达的位置已经超过了数组末尾,则可以直接返回True
        return max_distance >= len(nums) - 1

if __name__ == '__main__':
    list_nums = [3, 3, 1, 1, 4]
    print(Solution().canJump(list_nums))
   #   对于数组[3, 3, 1, 1, 4],从位置0出发,可以跳到位置3,然后跳1步,跳到位置4,跳4步到达末尾。
   # 因此,返回True。
    list_nums = [3, 2, 1, 0, 4]
    print(Solution().canJump(list_nums))  # 无法从位置0跳到位置3,因为nums[0] = 3,加上当前位置0,并不能到达末尾,因此返回False。

# 简单来讲,只要当前位置加上跳转的位置能够超过或者到达最远的位置,就说明可以到达末尾,否则就返回False。

# 利用贪心算法来判断是否能够从数组的第一个位置跳跃到最后一个位置。
# 每一步都尽可能地更新能够到达的最远位置,从而避免检查所有可能的跳跃路径。


# 时间复杂度:O(n),代码遍历了数组nums一次,没有嵌套循环或其他会增加时间复杂度的操作。因此,时间复杂度是O(n),其中n是数组nums的长度。
# 空间复杂度:O(1),代码中只使用了几个变量(如max_distance和i)来追踪当前能够到达的最远位置和当前位置。
# 这些变量不随数组nums的大小变化而增加,因此空间复杂度是O(1)。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值