LeetCode45-跳跃游戏II

昨天上午参加了学院研会举办的年终总结大会

感触颇多

自己是本学期中期才加入研会的

目的其实并不单纯——为了活动学分

但是和部门内的朋友相处久了之后

发现对此有了更多地感情

今天终于见到了心心念念的乔雨学姐——研会主席

倒不是我对她动了什么花心思

而是我觉得她真的很会说话

今天也是真的特别特别幸运

得到了优秀个人这个奖项

LeetCode45-跳跃游戏II_第1张图片

真的是很开心得到大家的认可

毕竟得到认可总是让人很开心的

奖品也是很喜人,哈哈哈哈哈

LeetCode45-跳跃游戏II_第2张图片

其实关于研会我还有许多话想说

看看后面有没有时间好好整理下,专门写篇文章来纪念这段生活

LeetCode45-跳跃游戏II_第3张图片


45-跳跃游戏II

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

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

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

示例:

输入: [2,3,1,1,4]
输出: 2
解释: 跳到最后一个位置的最小跳跃数是 2。
     从下标为 0 跳到下标为 1 的位置,跳 1 步,然后跳 3 步到达数组的最后一个位置。

说明:

假设你总是可以到达数组的最后一个位置。

思路:

本题是借鉴了贪心算法的思想,本题的题设是:假设你总是可以到达数组的最后一个位置。所以本题就不用和第55题那样考虑这个可不可达的情况了,但是不是说:这题就比第55题简单了呢?回答这个问题之前,大家可以先看看我写的关于第55题的文章。

程小新同学:LeetCode55-跳跃游戏​zhuanlan.zhihu.com

打完广告之后,接着回归正题哈!答案肯定是不可能嘛,不然这题怎么号称为跳跃游戏的进阶版嘛,哈哈哈哈哈。但本题的难点在哪儿呢?难点就在于如何考虑某一个最大区间内跳跃的最大值。这句话看不懂的读者可以先看看下面这幅图:

LeetCode45-跳跃游戏II_第4张图片

我们的解题思想也是从这开始的,代码很简单,我们就直接贴代码了。

class Solution(object):
    # 本题也是动态规划的思想,本题的题设是:假设你总是可以到达数组的最后一个位置
    # 所以本题就不用和第55题那样考虑这个可不可达的情况了
    def jump(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        step_num = 0
        max_num = 0
        for index in range(len(nums)):
            if max_num >= len(nums)-1:
                break
            if index+nums[index] > max_num:
                step_num += 1
            max_num = max(max_num, index+nums[index])
        return step_num


if __name__ == "__main__":
    nums = [1]
    final_result = Solution().jump(nums)
    print(final_result)

执行效率也是挺不错的,在90%左右。

LeetCode45-跳跃游戏II_第5张图片

 

 

 

 

你可能感兴趣的:(LeetCode)