赞
踩
题目描述:
给定一个非负整数数组 nums
,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个下标。
输入:nums = [2,3,1,1,4] 输出:true 解释:可以先跳 1 步,从下标 0 到达下标 1, 然后再从下标 1 跳 3 步到达最后一个下标。
解题思路:
注意,很容易陷入的误区是我怎么跳,但其实,怎么跳无所谓,只要所在位置的可跳的最大覆盖范围能达到最后一个位置下标即可满足要求。
贪心算法的解题思路为先求局部最优,以求得的局部最优为前提求整体最优。
显然,每次跳跃的最优为解为该位置的最大覆盖范围即cover—max=location+skip_step,整体最优解为局部最优的最大值,当整体最优能满足覆盖范围为整个数组时,返回True,反之,返回False。
代码实现:
- class Solution(object):
- def canJump(self, nums):
- """
- :type nums: List[int]
- :rtype: bool
- """
- if len(nums)==1:return True
- i=0
- cover = 0
- while i <= cover: ###表示在覆盖范围内跳跃,更新最大覆盖值
- cover = max(i+nums[i], cover)
- if cover >= len(nums)-1:return True
- i+=1
- return False
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。