LeetCode45-跳跃游戏II
昨天上午参加了学院研会举办的年终总结大会
感触颇多
自己是本学期中期才加入研会的
目的其实并不单纯——为了活动学分
但是和部门内的朋友相处久了之后
发现对此有了更多地感情
今天终于见到了心心念念的乔雨学姐——研会主席
倒不是我对她动了什么花心思
而是我觉得她真的很会说话
今天也是真的特别特别幸运
得到了优秀个人这个奖项
真的是很开心得到大家的认可
毕竟得到认可总是让人很开心的
奖品也是很喜人,哈哈哈哈哈
其实关于研会我还有许多话想说
看看后面有没有时间好好整理下,专门写篇文章来纪念这段生活
45-跳跃游戏II
给定一个非负整数数组,你最初位于数组的第一个位置。
数组中的每个元素代表你在该位置可以跳跃的最大长度。
你的目标是使用最少的跳跃次数到达数组的最后一个位置。
示例:
输入: [2,3,1,1,4]
输出: 2
解释: 跳到最后一个位置的最小跳跃数是 2。
从下标为 0 跳到下标为 1 的位置,跳 1 步,然后跳 3 步到达数组的最后一个位置。
说明:
假设你总是可以到达数组的最后一个位置。
思路:
本题是借鉴了贪心算法的思想,本题的题设是:假设你总是可以到达数组的最后一个位置。所以本题就不用和第55题那样考虑这个可不可达的情况了,但是不是说:这题就比第55题简单了呢?回答这个问题之前,大家可以先看看我写的关于第55题的文章。
程小新同学:LeetCode55-跳跃游戏zhuanlan.zhihu.com
打完广告之后,接着回归正题哈!答案肯定是不可能嘛,不然这题怎么号称为跳跃游戏的进阶版嘛,哈哈哈哈哈。但本题的难点在哪儿呢?难点就在于如何考虑某一个最大区间内跳跃的最大值。这句话看不懂的读者可以先看看下面这幅图:
我们的解题思想也是从这开始的,代码很简单,我们就直接贴代码了。
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%左右。