• 跳跃游戏


    55. 跳跃游戏

    给定一个非负整数数组,你最初位于数组的第一个位置。

    数组中的每个元素代表你在该位置可以跳跃的最大长度。

    判断你是否能够到达最后一个位置。

    示例 1:

    输入: [2,3,1,1,4]
    输出: true
    解释: 我们可以先跳 1 步,从位置 0 到达 位置 1, 然后再从位置 1 跳 3 步到达最后一个位置。
    

    示例 2:

    输入: [3,2,1,0,4]
    输出: false
    解释: 无论怎样,你总会到达索引为 3 的位置。但该位置的最大跳跃长度是 0 , 所以你永远不可能到达最后一个位置。
    

    思路

    在每个能跳到的位置起跳,更新能跳的最远距离

    def canJump(nums):
        maxdist = nums[0] #能跳的最远距离
        for i in range(len(nums)):
            if i > maxdist:#如果该位置不能起跳,退出
                return False
            maxdist = max(maxdist,nums[i]+i)
        return True #如果能跳到结束说明可以到达最后位置
    

    另一种实现:

    在每个能跳到的位置依次跳,更新能跳的最远距离,如果最远距离超过尾部返回

    def canJump(nums):
        if len(nums)<=1:
            return True
        maxdist = nums[0]   #在当前位置能跳的最远距离
        pre = 0
        while pre != maxdist:#只要在前进,就继续
            temp = maxdist
            for i in range(pre,maxdist+1):
                maxdist = max(nums[i]+i,maxdist)
                if maxdist >= len(nums)-1:
                    return True
            pre = temp  #上一次跳到的最远位置
        return False
    
    

    45. 跳跃游戏 II

    给定一个非负整数数组,你最初位于数组的第一个位置。

    数组中的每个元素代表你在该位置可以跳跃的最大长度。

    你的目标是使用最少的跳跃次数到达数组的最后一个位置。

    示例:

    输入: [2,3,1,1,4]
    输出: 2
    解释: 跳到最后一个位置的最小跳跃数是 2。
         从下标为 0 跳到下标为 1 的位置,跳 1 步,然后跳 3 步到达数组的最后一个位置。
    
    #跳到最后的最小次数
    def jump(nums):
        end = 0
        maxPosition = nums[0] 
        ans = 0
        for i in range(len(nums)-1):
            #找能跳的最远的
            maxPosition = max(maxPosition, nums[i] + i)
            if i == end: #遇到边界,就更新边界,并且步数加一
                end = maxPosition
                ans += 1    
        return ans
    
    
  • 相关阅读:
    2021NUAA暑假集训 Day3 题解
    2021NUAA暑假集训 Day2 题解
    2021NUAA暑期模拟赛部分题解
    CodeForces 1038D Slime
    UVA 11149 Power of Matrix
    UVA 10655 Contemplation! Algebra
    UVA 10689 Yet another Number Sequence
    HDU 4549 M斐波那契数列
    HDU 4990 Reading comprehension
    CodeForces 450B Jzzhu and Sequences
  • 原文地址:https://www.cnblogs.com/gongyanzh/p/12720294.html
Copyright © 2020-2023  润新知